0
A
回答
2
輸出讓我們嘗試重申你的問題 - 您正在尋找具有10狀態,但不具備的22狀態一旦問題是措辭這樣的文件,我們可以很容易地轉換使用exists
操作到SQL要求:
SELECT *
FROM mytable a
WHERE status = 10 AND
NOT EXISTS (SELECT *
FROM mytable b
WHERE a.filename = b.filename AND
b.status = 22)
+0
的OP說'我不應該得到的文件名是兩個10和22 status'這只是檢查其是否具有狀態'10',而不是狀態'輸出22'但不檢查相反情況。 – MT0
+0
嗨Mureinik。 。感謝您的建議。 Ur查詢工作。非常感謝 –
0
這裏有一個查詢得到的結果:
WITH files AS(
SELECT 'A' AS filename, 10 AS status FROM dual UNION ALL
SELECT 'A' AS filename, 22 AS status FROM dual UNION ALL
SELECT 'B' AS filename, 10 AS status FROM dual UNION ALL
SELECT 'C' AS filename, 22 AS status FROM dual
)
SELECT filename, status
FROM files
WHERE filename NOT IN (
SELECT f1.filename
FROM files f1, files f2
WHERE f1.filename = f2.filename
AND f1.status = 22
AND f2.status = 10
);
我在表中增加一個C記錄檢查結果的正確性:
B 10
C 22
0
我不應該得到輸出,其文件名是10和22狀態
換句話說,你可以有狀態10
,並且沒有狀態爲22
的行,或者可以使用狀態22
,並且沒有狀態爲10
的行。
無論這些查詢的需要自連接(它們都只能使用一個表掃描):
查詢:
SELECT filename
FROM table_name
GROUP BY filename
HAVING ( COUNT(CASE status WHEN 10 THEN 1 END) > 0
AND COUNT(CASE status WHEN 22 THEN 1 END) = 0)
OR ( COUNT(CASE status WHEN 10 THEN 1 END) = 0
AND COUNT(CASE status WHEN 22 THEN 1 END) > 0);
輸出:
FILENAME
--------
B
查詢:
SELECT filename,
status
FROM (
SELECT t.*,
COUNT(CASE status WHEN 10 THEN 1 END)
OVER (PARTITION BY filename) AS s10,
COUNT(CASE status WHEN 22 THEN 1 END)
OVER (PARTITION BY filename) AS s22
FROM table_name t
WHERE status IN (10, 22)
)
WHERE (s10 > 0 AND s22 = 0)
OR (s10 = 0 AND s22 > 0);
輸出:
FILENAME STATUS
-------- ------
B 10
-2
select Filename, min(status)
from [table_name]
group by Filename
having count(*) = 1
相關問題
- 1. 比較在同一個表
- 2. 如何比較存儲在同一個表中的值與qlikview?
- 3. 如何在不同的列在同一個表中的值進行比較
- 4. 比較在同一列表
- 5. 比較數據/在同一個表
- 6. 在同一個表中比較子
- 7. SQL比較同一表中的COUNT值
- 8. 如何比較地址與同一個customerno在同一個表中sql
- 9. 比較同一列中的多個值
- 10. 如何比較2個列表值?
- 11. 如何在同一天比較多個時間表和出席
- 12. 比較同一個表的數據
- 13. MySQL比較同一個表上的兩個值
- 14. 比較同一個表中的兩個值
- 15. MySQL - 如何比較兩個表之間共同的值
- 16. 比較同一表中的同一列
- 17. 如何比較同一個MySQL表中不同行的不同列(在php中)?
- 18. 將一個列表中的值比較
- 19. 如何比較兩個表
- 20. 比較兩個表的值
- 21. 比較兩個表值
- 22. 如何比較同一表中同一列中的數據
- 23. 比較運營商 - 如何在PHP中比較3個值
- 24. 如何比較相同枚舉的值? (==比較不起作用!)
- 25. 如何比較值在JavaScript
- 26. mysql如何比較同一個表中的兩行?
- 27. 如何比較同一個表中的記錄列?
- 28. 如何比較同一個表中的行?
- 29. 如何比較同一個SQL Server表中的記錄
- 30. 如何比較mysql中的同一個表格
請說明您的問題,並添加您使用至今讓你的輸出 – Carlo
我現在查詢查詢是SELECT * FROM表,其中狀態= 10; –
我得到2行A || 10和B || 10但我不應得到狀態爲10和22的文件名 –