我有一个包含8个表的项目数据库。在那里,我想编写一个存储过程来为指定的项ID选择所有大于0的值。 我现在的问题是只返回指定项的值大于0的列的语句。
基本上我写了一个简单的select,返回以下数据:
Example 1 http://i.imagebanana.com/img/rhw2sm9u/1327501679.jpg
当“Cold”列现在包含0值时,它返回与上面相同的结构,但Cold是0而不是120.
但是如果Cold的值是0,我不想得到这个列并丢弃它,我只得到剩下的值:
Example 2 http://i.imagebanana.com/img/dux1gyb8/1327502046.jpg
我正在使用MSSQL Management Studio 2008,数据库是2008 R2。
提前致谢,抱歉我的英语不好。
答案 0 :(得分:3)
查询应该返回固定列。没有语法允许您仅有条件地返回某些列。
但是可以在IF
语句的帮助下调用条件查询。因此,您可以先检查您要检索的行是否在Cold
中包含非零值。如果是,则使用其他列检索Cold
,否则,省略它:
IF EXISTS (SELECT * FROM YourTable WHERE ItemID = @ItemID AND Cold <> 0)
SELECT
ItemID,
ItemName,
Cold
FROM YourTable
WHERE ItemID = @ItemID
ELSE
SELECT
ItemID,
ItemName
FROM YourTable
WHERE ItemID = @ItemID
也就是说,整个存储过程定义如下所示:
CREATE PROCEDURE YourStoredProcedure
@ItemID int
AS
BEGIN
IF EXISTS (SELECT * FROM YourTable WHERE ItemID = @ItemID AND Cold <> 0)
SELECT
ItemID,
ItemName,
Cold
FROM YourTable
WHERE ItemID = @ItemID
ELSE
SELECT
ItemID,
ItemName
FROM YourTable
WHERE ItemID = @ItemID
END
答案 1 :(得分:0)
您必须为结果集中的每一行/列返回“值”。如果您不想获得0
值,则可以使用以下内容将它们变为NULL:
SELECT
NULLIF(YourCol1,0) AS YourCol1, NULLIF(YourCol2,0) AS YourCol2, ....
FROM ...
或
SELECT
CASE WHEN YourColumn1>0 THEN YourColumn1 ELSE 0 END AS YourColumn1,
CASE WHEN YourColumn2>0 THEN YourColumn2 ELSE 0 END AS YourColumn2,
...
FROM ...