我有一个有8个表的项目数据库。在这里,我想编写一个存储过程来为指定的项ID选择所有大于0的值,但现在的问题是语句只返回指定项的值大于0的列。
基本上,我编写了一个简单的select,它返回以下数据:
Example 1 http://i.imagebanana.com/img/rhw2sm9u/1327501679.jpg
当列“冷”现在包含一个0值时,它返回与上面相同的结构,但是冷是0而不是120。
但是如果冷的值是0,我不想得到这一列,然后丢弃它,我只得到剩余的值:
Example 2 http://i.imagebanana.com/img/dux1gyb8/1327502046.jpg
我使用的是MSSQL Management Studio2008,数据库是2008 R2。
提前感谢并为我糟糕的英语表达歉意。
发布于 2012-01-26 02:59:08
查询应该返回一组固定的列。没有语法允许您只有条件地返回某些列。
但是您可以在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
发布于 2012-01-25 23:14:35
你必须为结果集中的每一行/每列返回一个“值”。如果您不想获取NULL值,那么可以使用如下命令将它们转换为0
:
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 ...
https://stackoverflow.com/questions/9004566
复制相似问题