如何编写SQL'case'命令?

时间:2013-02-18 05:41:48

标签: sql select

我有一个网格视图,它有一个类型和两个列,它们绑定到type1type2

然后我添加了一个脸颊盒。

我想绑定数据,但我的查询数据是重复的。

这是我的查询

SELECT DISTINCT 
    userId, 
    MAX(CASE WHEN ApproverTypeID = 1 THEN ApproverTypeID END) AS Type1, 
    MAX(CASE WHEN ApproverTypeID = 2 THEN ApproverTypeID END) AS Type2
FROM         
    table1
GROUP BY 
    ApproverTypeID, userId

我原来的表看起来像这样..

Name        Type
---------
    Name1     1
    Name2     1
    Name1     0

但我希望得到像这样的输出......

Name       Type1    Type2
----------------
    Name1    1       0
    Name2    1       null

我该怎么做?

2 个答案:

答案 0 :(得分:1)

因为您没有提到您正在使用的数据库服务器,所以下面的查询几乎适用于所有RDBMS(但不是全部

SELECT  Name,
        MAX(CASE WHEN Type = 1 THEN Type END) Type1,
        MAX(CASE WHEN Type = 2 THEN Type END) Type2
FROM    tableName
GROUP   By Name

答案 1 :(得分:0)

您只需删除GROUP BY子句的ApproverTypeID,因为在MAX()函数中使用ApproverTypeID。之后,您还可以删除过多的DISTINCT子句。你会收到你想要的东西

SELECT userId, 
       MAX(CASE WHEN ApproverTypeID = 1 THEN ApproverTypeID END) AS Type1, 
       MAX(CASE WHEN ApproverTypeID = 2 THEN ApproverTypeID END) AS Type2
FROM table1
GROUP BY userId