我想知道是否有任何其他有效的方法或查詢可以使用 AND 運算子為以下查詢獲取所需的輸出,因為如果我在下面的查詢中運行此查詢,我將得到 0 個計數。但是根據資料倉庫報告,下面的組合有很多記錄。
有什么替代的搜索方式嗎?
select Count(*)
FROM Cst_Cust_Attributes
WHERE ATTRIBUTE_VALUE = 'REG'
AND ATTRIBUTE_VALUE = 'GUEST'
AND ATTRIBUTE_VALUE = 'EVENT'
提前致謝
uj5u.com熱心網友回復:
假設您的表格有一cust_id列,您似乎想要類似的東西:
SELECT cust_id, count(*)
FROM Cst_Cust_Attributes
WHERE attribute_value IN ('REG', 'GUEST', 'EVENT')
GROUP BY cust_id
HAVING count(*) = 3
這將列出具有所有三個屬性值的所有客戶。如果您不想看到,可以將計數排除在列串列之外;它不需要在那里,重要的是在having子句中包含它。
db<> 擺弄非常基本的虛構資料。
如注釋中所述,此表中的任何單行都不能有多個列的值,因此您需要查找具有三個值中的任何or一個的行 - 使用or in。
然后聚合計算為每個客戶找到了多少這些值(請參閱 db<>fiddle 中的第一個查詢),其中將包括具有這三個中任何一個的任何客戶。
最后,該having子句過濾掉了所有值少于三個的客戶。如果客戶的計數是 3,那么他們在表中有三行與您要查找的值相匹配。
(這也假設他們只能擁有每個屬性值一次 - 如果客戶中可能有重復項,那么可以通過修改計入的內容來處理HAVING count(distinct attribute_value) = 3- db<>fiddle with duplicates。)
我需要從另一個表 cst_mail 加入另一個列 mail_id
您可以在主查詢中添加一個聯接:
SELECT cca.cust_id, cm.mail_id
FROM Cst_Cust_Attributes cca
LEFT JOIN cst_mail cm ON cm.cust_id = cca.cust_id
WHERE cca.attribute_value IN ('REG', 'GUEST', 'EVENT')
GROUP BY cca.cust_id
HAVING count(distinct cca.attribute_value) = 3
或者將其轉換為行內視圖(或 CTE)并加入其中:
SELECT tmp.cust_id, cm.mail_id
FROM (
SELECT cust_id
FROM Cst_Cust_Attributes
WHERE attribute_value IN ('REG', 'GUEST', 'EVENT')
GROUP BY cust_id
HAVING count(distinct attribute_value) = 3
) tmp
LEFT JOIN cst_mail cm ON cm.cust_id = tmp.cust_id
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/458870.html
上一篇:SQL-標記行直到每組的0值
下一篇:INNERJOIN上的頂部
