如何根据条件对 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

http://sqlfiddle.com/#!3/ece758/7

如果我懂你的话

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,但不一定位于两个位置。