구매 테이블에 SQL 쿼리를 작성하고 같은 날 여러 항목을 구매 한 경우 'item'열을 'Multi'로 변경하는 데 도움이 필요합니다.
다음은 샘플 테이블입니다.
name | date | item
-------------------------
Jack | 20120105 | TV
Jack | 20120105 | Table
Jack | 20120105 | Chair
Ryan | 20170822 | TV
Roma | 20190525 | TV
Bill | 20110121 | Table
예를 들어 위 표의 Jack은 같은 날에 여러 번 구매 했으므로 'item'열에 대해 'Multi'가되고 싶습니다.
name | date | item
-------------------------
Jack | 20120105 | Multi
Ryan | 20170822 | TV
Roma | 20190525 | TV
Bill | 20110121 | Table
이 쿼리는 작동하지만 같은 날 같은 사람이 2 개 이상의 항목을 구매 한 경우 어떻게됩니까?
select name
case when p1.item <> p2.item then 'U'
else p1.item
end as item_name
from purchases p1 join purchases p2 on (p1.name = p2.name)
이것을 달성하는 다른 더 좋은 방법이 있습니까?
감사!
당신은 사용할 수 EXISTS
와 함께 절을 SELECT DISTINCT
을 변경 item
에 Multi
둘 이상의 항목이 동일한 날에 구입하는 경우 :
SELECT DISTINCT name, date,
CASE WHEN EXISTS (SELECT *
FROM purchases p2
WHERE p2.name = p1.name
AND p2.date = p1.date
AND p2.item != p1.item) THEN 'Multi'
ELSE item
END AS item
FROM purchases p1
또 다른 대안은 COUNT
특정 날짜에 사람이 구매 한 항목 을 집계하고 확인하는 것 입니다.
SELECT name, date,
CASE WHEN COUNT(*) > 1 THEN 'Multi'
ELSE MIN(item)
END AS item
FROM purchases
GROUP BY name, date
두 경우 모두 출력은 다음과 같습니다.
name date item
Jack 20120105 Multi
Ryan 20170822 TV
Roma 20190525 TV
Bill 20110121 Table
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다