首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择值大于0的列

选择值大于0的列
EN

Stack Overflow用户
提问于 2012-01-25 22:44:44
回答 2查看 3.4K关注 0票数 2

我有一个有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。

提前感谢并为我糟糕的英语表达歉意。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-26 02:59:08

查询应该返回一组固定的列。没有语法允许您只有条件地返回某些列。

但是您可以在IF语句的帮助下对条件调用查询。因此,您可以首先检查要检索的行在Cold中是否包含非零值。如果是,则检索包含其他列的Cold,如果不是,则省略它:

代码语言:javascript
运行
复制
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

也就是说,整个存储过程定义将如下所示:

代码语言:javascript
运行
复制
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
票数 3
EN

Stack Overflow用户

发布于 2012-01-25 23:14:35

你必须为结果集中的每一行/每列返回一个“值”。如果您不想获取NULL值,那么可以使用如下命令将它们转换为0

代码语言:javascript
运行
复制
SELECT
    NULLIF(YourCol1,0) AS YourCol1, NULLIF(YourCol2,0) AS YourCol2, ....
    FROM ...

代码语言:javascript
运行
复制
SELECT
    CASE WHEN YourColumn1>0 THEN YourColumn1 ELSE 0 END AS YourColumn1,
    CASE WHEN YourColumn2>0 THEN YourColumn2 ELSE 0 END AS YourColumn2,
    ...
    FROM ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9004566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档