我设计了以下视图并尝试将其用作存储过程;但是,我的存储过程不会返回与我的视图相同的行。
我的视图返回46行:
SELECT
NDC_Text, Trade_Name, Vendor_Code, SUM(Quantity_Received) AS QTY,
SUM(CASE WHEN Cost_Center = 7070 THEN Cost_Center_Dollars ELSE 0 END) AS [7070],
SUM(CASE WHEN Cost_Center = 7071 THEN Cost_Center_Dollars ELSE 0 END) AS [7071],
SUM(CASE WHEN Cost_Center = 7700 THEN Cost_Center_Dollars ELSE 0 END) AS [7700],
SUM(CASE WHEN Cost_Center = 7701 THEN Cost_Center_Dollars ELSE 0 END) AS [7701],
SUM(CASE WHEN Cost_Center = 7702 THEN Cost_Center_Dollars ELSE 0 END) AS [7702],
SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7703],
SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7705],
SUM(Cost_Center_Dollars) AS Total, Program_Type
FROM dbo.VDP_Master_Drug_Receipts_Log
WHERE Date_Entered BETWEEN '10/1/2011' AND '11/1/2011'
AND (Program_Type = 'VDP-BULK')
GROUP BY NDC_Text, Trade_Name, Vendor_Code, Program_Type
ORDER BY Trade_Name
我的存储过程
GO ALTER PROCEDURE [dbo].[ShowProductByCategory](@StartDate DateTime, @EndDate DateTime, @Type Varchar(15))
AS
Return
SELECT NDC_Text, Trade_Name, Vendor_Code, SUM(Quantity_Received) AS QTY,
SUM(CASE WHEN Cost_Center = 7070 THEN Cost_Center_Dollars ELSE 0 END) AS [7070],
SUM(CASE WHEN Cost_Center = 7071 THEN Cost_Center_Dollars ELSE 0 END) AS [7071],
SUM(CASE WHEN Cost_Center = 7700 THEN Cost_Center_Dollars ELSE 0 END) AS [7700],
SUM(CASE WHEN Cost_Center = 7701 THEN Cost_Center_Dollars ELSE 0 END) AS [7701],
SUM(CASE WHEN Cost_Center = 7702 THEN Cost_Center_Dollars ELSE 0 END) AS [7702],
SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7703],
SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7705],
SUM(Cost_Center_Dollars) AS Total, Program_Type
FROM dbo.VDP_Master_Drug_Receipts_Log
WHERE Date_Entered BETWEEN @StartDate AND @StartDate
AND (Program_Type = 'Type')
GROUP BY NDC_Text, Trade_Name, Vendor_Code, Program_Type
ORDER BY Trade_Name
答案 0 :(得分:1)
您的存储过程的WHERE
子句有
WHERE Date_Entered BETWEEN @StartDate AND @StartDate
应该是@EndDate
还有一个不同的Progam_Type
,会导致不同的结果。
答案 1 :(得分:1)
您的存储过程选择数据集 - 因此您不需要(且必须没有)RETURN
条款!
试试这个:
ALTER PROCEDURE [dbo].[ShowProductByCategory]
(@StartDate DateTime, @EndDate DateTime, @Type Varchar(15))
AS
-- Return NO RETURN HERE !!
SELECT
NDC_Text, Trade_Name, Vendor_Code, SUM(Quantity_Received) AS QTY,
SUM(CASE WHEN Cost_Center = 7070 THEN Cost_Center_Dollars ELSE 0 END) AS [7070],
SUM(CASE WHEN Cost_Center = 7071 THEN Cost_Center_Dollars ELSE 0 END) AS [7071],
SUM(CASE WHEN Cost_Center = 7700 THEN Cost_Center_Dollars ELSE 0 END) AS [7700],
SUM(CASE WHEN Cost_Center = 7701 THEN Cost_Center_Dollars ELSE 0 END) AS [7701],
SUM(CASE WHEN Cost_Center = 7702 THEN Cost_Center_Dollars ELSE 0 END) AS [7702],
SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7703],
SUM(CASE WHEN Cost_Center = 7703 THEN Cost_Center_Dollars ELSE 0 END) AS [7705],
SUM(Cost_Center_Dollars) AS Total, Program_Type
FROM dbo.VDP_Master_Drug_Receipts_Log
WHERE Date_Entered BETWEEN @StartDate AND @EndDate
AND (Program_Type = 'Type')
GROUP BY
NDC_Text, Trade_Name, Vendor_Code, Program_Type
ORDER BY
Trade_Name
答案 2 :(得分:0)
问题出在WHERE子句
中WHERE Date_Entered BETWEEN @StartDate AND @StartDate
AND (Program_Type = 'Type')
我认为一定是
WHERE Date_Entered BETWEEN @StartDate AND @EndDate
AND (Program_Type = @Type)