【问题标题】:Selecting only rows that return a matching column value using CASE THEN使用 CASE THEN 仅选择返回匹配列值的行
【发布时间】:2014-11-11 15:53:11
【问题描述】:

我有以下 SQL 查询,我试图只返回 MAKE 设置为“BANER”的发票,这是获取发票表的所有行,底部有所有 BANER 行,我该如何返回只有 BANER 是品牌的行?

SELECT [ART_NO],
       [QTY],
       [DUE_DATE],
       make=CASE make
              WHEN 'BANER' THEN 'BANER'
              ELSE ' ' + make
            END,
       [PRODUCT],[PRICE],[DETAIL],
       [COLOUR],[RS1],[RS2],[RS3],
       [RS4],[RS5],[RS6],[RS7],[RS8],
       [RS9],[RS10],[RS11],[RS12]
FROM   [DBKular].[dbo].[INVOISTK]
WHERE  make != ''
ORDER  BY [MAKE] ASC,
          [DUE_Date] 

【问题讨论】:

  • 如果您从查询中删除与问题无关的所有内容并正确格式化以避免滚动,您可以更快地获得答案。

标签: sql select case


【解决方案1】:

您的查询中不需要case statement,只需要Where clause。过滤Make = 'Baner'后不会有其他品牌了。

SELECT [ART_NO],
       [QTY],
       [DUE_DATE],
       [make],
       [PRODUCT],[PRICE],[DETAIL],
       [COLOUR],[RS1],[RS2],[RS3],
       [RS4],[RS5],[RS6],[RS7],[RS8],
       [RS9],[RS10],[RS11],[RS12]
FROM   [DBKular].[dbo].[INVOISTK]
WHERE  make = 'BANER'
ORDER  BY [MAKE] ASC,
          [DUE_Date] 

【讨论】:

    【解决方案2】:

    好吧,过滤特定值的行的一种方法是使用旨在过滤特定值的行的子句 - the WHERE clause!

    SELECT 
        [ART_NO],
        [QTY],
        [DUE_DATE],
        make=
            CASE make 
                WHEN 'BANER' 
                THEN 'BANER' 
                ELSE ' ' + make 
            END, 
        [PRODUCT],
        [PRICE],
        [DETAIL],
        [COLOUR],
        [RS1],
        [RS2],
        [RS3],
        [RS4],
        [RS5],
        [RS6],
        [RS7],
        [RS8],
        [RS9],
        [RS10],
        [RS11],
        [RS12] 
    FROM 
        [DBKular].[dbo].[INVOISTK] 
    WHERE make = 'BANER' 
    ORDER BY 
        [MAKE] asc, 
        [DUE_Date]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多