如何编写SQL'case'命令?
问题描述:
我有一个网格视图,它具有类型1和类型2列,它绑定到type1
和type2
。如何编写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
哪有我这么做?
答
你只需要删除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
答
因为你没有提到你正在使用的数据库服务器,下面的查询将工作在几乎所有的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
你的问题还不够清楚。请解释你的输出内容。 – Rachcha 2013-02-18 05:44:14
您正在使用哪些DBMS? – pyrospade 2013-02-18 05:44:32
当您使用GROUP BY时,您并不需要DISTINCT。 – 2013-02-18 06:06:42