如何根据条件对 table 中的值进行分组
How to group a value(s) in a table based on a condition
我有一个 table,其值如下:
MemberID Location DateJoined
79925 183 2013-07-01 00:00:00.000
79925 184 2013-07-02 00:00:00.000
65082 184 2012-07-22 00:00:00.000
72046 183 2013-05-01 00:00:00.000
72046 184 2013-05-10 00:00:00.000
...
这里我需要检查上面的 table 是否有 locationID 183 & 184.
根据这些结果,我需要创建一个新的 table,如下所示
MemberID Benifit
79925 Yes
65082 No
72046 Yes
INSERT INTO table2 (MemberID, Benifit)
SELECT t1.MemberID,
CASE WHEN t2.MemberID IS NULL OR t3.MemberID IS NULL THEN 'NO' ELSE 'YES' END AS Benefit
FROM table1 t1
LEFT JOIN table1 t2 ON (t2.MemberID = t1.MemberID AND t2.Location = 183)
LEFT JOIN table1 t3 ON (t3.MemberID = t1.MemberID AND t3.Location = 184)
WHERE t1.Location IN (183,184)
GROUP BY t1.MemberID, t2.MemberID, t3.MemberID
如果我懂你的话
select MemberID, case when Sum(x) = 2 then 'YES' else 'No' end Benifit from
(
SELECT *, CASE WHEN Location in (183,184) THEN 1 ELSE 0 END AS x
FROM MyTable
) t
group t by MemberID
您似乎想显示位置为 183 和 184 的所有成员。您可以这样做:
INTERSECT
子查询将 return 所有与 183 和 184 位置关联的 MemberID,CASE
将显示是或否。
SELECT
MemberID,
CASE
WHEN MemberID IN
(SELECT MemberID FROM Table WHERE Location = 183
INTERSECT
SELECT MemberID FROM Table WHERE Location = 184)
THEN 'Yes' ELSE 'No' END as 'Benefit'
FROM Table
只需使用 WHERE Location in (183,183)
即可向您显示位于任一位置的 MemberID,但不一定位于两个位置。
我有一个 table,其值如下:
MemberID Location DateJoined
79925 183 2013-07-01 00:00:00.000
79925 184 2013-07-02 00:00:00.000
65082 184 2012-07-22 00:00:00.000
72046 183 2013-05-01 00:00:00.000
72046 184 2013-05-10 00:00:00.000
...
这里我需要检查上面的 table 是否有 locationID 183 & 184.
根据这些结果,我需要创建一个新的 table,如下所示
MemberID Benifit
79925 Yes
65082 No
72046 Yes
INSERT INTO table2 (MemberID, Benifit)
SELECT t1.MemberID,
CASE WHEN t2.MemberID IS NULL OR t3.MemberID IS NULL THEN 'NO' ELSE 'YES' END AS Benefit
FROM table1 t1
LEFT JOIN table1 t2 ON (t2.MemberID = t1.MemberID AND t2.Location = 183)
LEFT JOIN table1 t3 ON (t3.MemberID = t1.MemberID AND t3.Location = 184)
WHERE t1.Location IN (183,184)
GROUP BY t1.MemberID, t2.MemberID, t3.MemberID
如果我懂你的话
select MemberID, case when Sum(x) = 2 then 'YES' else 'No' end Benifit from
(
SELECT *, CASE WHEN Location in (183,184) THEN 1 ELSE 0 END AS x
FROM MyTable
) t
group t by MemberID
您似乎想显示位置为 183 和 184 的所有成员。您可以这样做:
INTERSECT
子查询将 return 所有与 183 和 184 位置关联的 MemberID,CASE
将显示是或否。
SELECT
MemberID,
CASE
WHEN MemberID IN
(SELECT MemberID FROM Table WHERE Location = 183
INTERSECT
SELECT MemberID FROM Table WHERE Location = 184)
THEN 'Yes' ELSE 'No' END as 'Benefit'
FROM Table
只需使用 WHERE Location in (183,183)
即可向您显示位于任一位置的 MemberID,但不一定位于两个位置。