2013-02-18 141 views
1

我有一个网格视图,它具有类型1和类型2列,它绑定到type1type2如何编写SQL'case'命令?

然后我添加一个脸颊框。

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

这是我的查询

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 

哪有我这么做?

+0

你的问题还不够清楚。请解释你的输出内容。 – Rachcha 2013-02-18 05:44:14

+1

您正在使用哪些DBMS? – pyrospade 2013-02-18 05:44:32

+1

当您使用GROUP BY时,您并不需要DISTINCT。 – 2013-02-18 06:06:42

回答

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 
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