仅选择使用CASE THEN返回匹配列值的行

时间:2014-11-11 15:53:11

标签: sql select case

我有以下SQL查询,我试图仅返回MAKE设置为' BANER'的发票,这是获取发票表的所有行,底部包含所有BANER行,如何只在BANER为make的地方返回行?

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] 

2 个答案:

答案 0 :(得分:2)

您的查询中不需要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] 

答案 1 :(得分:1)

那么,过滤特定值行的一种方法是使用旨在过滤特定值行的子句 - 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]