名、姓(複合一意)、および持ち帰り用の選択肢を含むテーブルがある場合、たとえば
+------+-------+---------+
|First | Last | Food |
+------+-------+---------+
|Bob | Smith | Pizza |
|Bob | Smith | Chips |
|Jim | Smith | Pizza |
|Lisa | Jones | Pizza |
|Lisa | Jones | Chinese |
|Lisa | James | Mexican |
|Eric | White | Chinese |
|Eric | White | Chips |
+------+-------+---------+
私は、食べ物を少なくとも2つ好み、そのうちの1つがピザである人々に対応するすべての行が必要です。すなわちの結果
+------+-------+---------+
|First | Last | Food |
+------+-------+---------+
|Bob | Smith | Pizza |
|Bob | Smith | Chips |
|Lisa | Jones | Pizza |
|Lisa | Jones | Chinese |
+------+-------+---------+
count(*)> 1の... group by ...を試してみましたが、希望どおりに機能しません。
助けてくれてありがとう。
別の方法:SQL Server2012以降のP。
SELECT FIRST,LAST,FOOD FROM(
SELECT A.FIRST,A.LAST,B.FOOD,
COUNT(*) OVER (PARTITION BY A.FIRST,A.LAST ORDER BY A.FIRST,A.LAST DESC) AS 'POS'
FROM TEST_FOOD A
INNER JOIN TEST_FOOD B
ON A.FIRST = B.FIRST
AND A.LAST = B.LAST
WHERE A.FOOD = 'PIZZA') TB WHERE POS = 2
また、SQL Server 2005+のもう1つのより標準的な方法は、最初の方法の方が高速ですが、MSSQLのバージョンによって制限されます。
SELECT C.FIRST,C.LAST,C.FOOD FROM
(
SELECT A.FIRST,A.LAST FROM TEST_FOOD A
INNER JOIN TEST_FOOD B
ON A.FIRST = B.FIRST
AND A.LAST = B.LAST
WHERE B.FOOD = 'PIZZA'
GROUP BY A.FIRST,A.LAST
HAVING COUNT(*) = 2
) TB INNER JOIN
TEST_FOOD C
ON TB.FIRST = C.FIRST
AND TB.LAST = C.LAST
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加