多表查询: 下面是同样效果的存储过程。 你应该先描述你的问题,看别人的也能解决你的问题,前提你是高手。
有具体问题可以在9-18点之间hi我联系,共同学习。
SELECT DISTINCT b.[billid], b.[billtype], b.[billdate], b.[billstates],
b.[billnumber], b.[inputman], b.[auditman], b.[note], b.[summary], b.[quantity],
b.[ysmoney], b.[ssmoney], b.[araptotal], b.[taxrate], b.[auditdate],
CASE WHEN b.[billtype] IN (44, 45) THEN b.[ssname] ELSE b.[cname] END AS [cname],
b.[ename] AS [employeename],
b.[auditmanname],
b.[inputmanname],
b.[aname] AS [accountname],
b.[departmentname],
b.[regionname]
FROM VW_C_BillIDX b LEFT JOIN
(SELECT DISTINCT bm.[Bill_ID], p.[Class_ID]
FROM BuyManageBill bm, Products p
WHERE bm.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT sm.[Bill_ID], p.[Class_ID]
FROM SaleManageBill sm, Products p
WHERE sm.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT st.[Bill_ID], p.[Class_ID] FROM StoreManageBill st, Products p
WHERE st.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT gc.[Bill_ID], p.[Class_ID] FROM GoodsCheckBill gc, Products p
WHERE gc.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT tm.[Bill_ID], p.[Class_ID] FROM TranManagebill tm, Products p
WHERE tm.[P_ID]=p.[Product_ID]) pd
ON b.[BillID]=pd.[Bill_ID]
WHERE (b.[billdate] BETWEEN '2009-08-02 00:00:00' AND '2009-08-02 23:59:59'
and b.billtype = 15 )
--万能单据查询
CREATE PROCEDURE TS_C_QrAllBill
( @lMode INT,--0 单据查询,1 草稿查询
@Begindate DATETIME,
@EndDate DATETIME,
@szC_id VARCHAR(30)='',--往来单位
@szZd_id VARCHAR(30)='', --制单人
@szE_id VARCHAR(30)='',--经手人
@szP_id VARCHAR(30)='',--商品ID
@szSh_id VARCHAR(30)='',--审核人
@szSs_id VARCHAR(30)='',--出仓库
@szSd_id VARCHAR(30)='',--入仓库
@szBillcode VARCHAR(60)='',
@szComment VARCHAR(300)='',
@nBilltype INT=0
)
WITH ENCRYPTION
AS
SET NOCOUNT ON
DECLARE @SQLScript VARCHAR(8000)
IF @szC_id<>'' SELECT @szC_id=ISNULL(@szC_id, '%')+'%'
IF @szZd_id<>'' SELECT @szZd_id=ISNULL(@szZd_id, '%')+'%'
IF @szE_id<>'' SELECT @szE_id=ISNULL(@szE_id, '%')+'%'
IF @szP_id<>'' SELECT @szP_id=ISNULL(@szP_id, '%')+'%'
IF @szSh_id<>'' SELECT @szSh_id=ISNULL(@szSh_id, '%')+'%'
IF @szSs_id<>'' SELECT @szSs_id=ISNULL(@szSs_id, '%')+'%'
IF @szSd_id<>'' SELECT @szSd_id=ISNULL(@szSd_id, '%')+'%'
IF @lMode=0
BEGIN
SELECT @SQLScript='SELECT DISTINCT b.[billid], b.[billtype], b.[billdate], b.[billstates],
b.[billnumber], b.[inputman], b.[auditman], b.[note], b.[summary], b.[quantity],
b.[ysmoney], b.[ssmoney], b.[araptotal], b.[taxrate], b.[auditdate],
CASE WHEN b.[billtype] IN (44, 45) THEN b.[ssname] ELSE b.[cname] END AS [cname],
b.[ename] AS [employeename],
b.[auditmanname],
b.[inputmanname],
b.[aname] AS [accountname],
b.[departmentname],
b.[regionname]
FROM VW_C_BillIDX b LEFT JOIN
(SELECT DISTINCT bm.[Bill_ID], p.[Class_ID] FROM BuyManageBill bm, Products p
WHERE bm.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT sm.[Bill_ID], p.[Class_ID] FROM SaleManageBill sm, Products p
WHERE sm.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT st.[Bill_ID], p.[Class_ID] FROM StoreManageBill s
t, Products p
WHERE st.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT gc.[Bill_ID], p.[Class_ID] FROM GoodsCheckBill gc, Products p
WHERE gc.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT tm.[Bill_ID], p.[Class_ID] FROM TranManagebill tm, Products p
WHERE tm.[P_ID]=p.[Product_ID]
) pd ON b.[BillID]=pd.[Bill_ID]'
+' WHERE (b.[billdate] BETWEEN '+CHAR(39)+CONVERT(VARCHAR(10),@BeginDate,20)+CHAR(39)
+' AND '+CHAR(39)+CONVERT(VARCHAR(10),@EndDate,20)+CHAR(39)+')'
END
ELSE
BEGIn
SELECT @SQLScript='SELECT DISTINCT b.[billid], b.[billtype], b.[billdate], b.[billstates],
b.[billnumber], b.[inputman], b.[auditman], b.[note], b.[summary], b.[quantity],
b.[ysmoney], b.[ssmoney], b.[araptotal], b.[taxrate], b.[auditdate],
CASE WHEN b.[billtype] IN (44, 45) THEN b.[ssname] ELSE b.[cname] END AS [cname],
b.[ename] AS [employeename],
b.[auditmanname],
b.[inputmanname],
b.[aname] AS [accountname],
b.[departmentname],
b.[regionname]
FROM VW_C_BillDraftIDX b LEFT JOIN
(SELECT DISTINCT bm.[Bill_ID], p.[Class_ID] FROM BuyManageBillDrf bm, Products p
WHERE bm.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT sm.[Bill_ID], p.[Class_ID] FROM SaleManageBillDrf sm, Products p
WHERE sm.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT st.[Bill_ID], p.[Class_ID] FROM StoreManageBillDrf st, Products p
WHERE st.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT gc.[Bill_ID], p.[Class_ID] FROM GoodsCheckBillDrf gc, Products p
WHERE gc.[P_ID]=p.[Product_ID]
UNION
SELECT DISTINCT tm.[Bill_ID], p.[Class_ID] FROM TranManagebillDrf tm, Products p
WHERE tm.[P_ID]=p.[Product_ID]
) pd ON b.[BillID]=pd.[Bill_ID]'
+' WHERE (b.[billdate] BETWEEN '+CHAR(39)+CONVERT(VARCHAR(10),@BeginDate,20)+CHAR(39)
+' AND '+CHAR(39)+CONVERT(VARCHAR(10),@EndDate,20)+CHAR(39)+')'
END
IF @szC_id<>'' SELECT @SQLScript=@SQLScript+' AND b.[cclass_id] LIKE '+CHAR(39)+@szC_id+CHAR(39)
IF @szE_id<>'' SELECT @SQLScript=@SQLScript+' AND b.[eclass_id] LIKE '+CHAR(39)+@szE_id+CHAR(39)
IF @szZd_id<>'' SELECT @SQLScript=@SQLScript+' AND b.[inputmanclass_id] LIKE '+CHAR(39)+@szZd_id+CHAR(39)
IF @szSh_id<>'' SELECT @SQLScript=@SQLScript+' AND b.[auditmanclass_id] LIKE '+CHAR(39)+@szSh_id+CHAR(39)
IF @szP_id<>'' SELECT @SQLScript=@SQLScript+' AND pd.[class_id] LIKE '+CHAR(39)+@szP_id+CHAR(39)
IF @szSs_id<>'' SELECT @SQLScript=@SQLScript+' AND b.[ssclass_id] LIKE '+CHAR(39)+@szSs_id+CHAR(39)
IF @szSd_id<>'' SELECT @SQLScript=@SQLScript+' AND b.[sdclass_id] LIKE '+CHAR(39)+@szSd_id+CHAR(39)
IF @szBillcode<>'' SELECT @SQLScript=@SQLScript+' AND b.[billnumber] LIKE '+CHAR(39)+'%'+@szBillcode+'%'+CHAR(39)
IF @szcomment<>'' SELECT @SQLScript=@SQLScript+' AND b.[note] LIKE '+CHAR(39)+'%'+@szcomment+'%'+CHAR(39)
IF @nBilltype<>0 SELECT @SQLScript=@SQLScript+' AND b.[billtype]='+CAST(@nBilltype AS VARCHAR)
ELSE SELECT @SQLScript=@SQLScript+' AND b.[billtype] NOT IN (58)'
SELECT @SQLScript=@SQLScript+' ORDER BY b.[billdate]'
--PRINT @SQLScript
EXEC (@SQLScript)
GOTO SUCCEE
SUCCEE:
RETURN 0
温馨提示:答案为网友推荐,仅供参考