簡體   English   中英

SQL Server-比較同一表中的值

[英]SQL Server - Compare values from the same table

在SQL Server中,我有一個包含以下數據(tblUserSettings)的表:

| CountryID | CityID  | UserType | Value1 | Value2 | Value3 |
| 9         | 3       | 1        | 5      | 5      | 5      |
| 9         | 3       | 2        | NULL   | NULL   | NULL   |
| 9         | 3       | 3        | 5      | 5      | 5      |
| 9         | 3       | 4        | 5      | 5      | 5      |
| 9         | 20      | 1        | 5      | 5      | 5      |
| 9         | 20      | 2        | NULL   | NULL   | NULL   |
| 9         | 20      | 3        | 5      | 5      | 5      |
| 9         | 20      | 4        | 0      | 0      | 0      |

我需要將CityID = 20的所有UserTypes的所有值與CityID = 3的對應UserTypes的所有值進行比較。CountryID =9。要比較的列是:Value1,Value2,Value3。

我只需要知道它們是否彼此匹配即可。 我嘗試執行以下操作:

SELECT CASE WHEN ISNULL(t1.Value1, 0) = ISNULL(t2.Value1, 0) THEN 1 ELSE 0 END AS Match1,
        CASE WHEN ISNULL(t1.Value2, 0) = ISNULL(t2.Value2, 0) THEN 1 ELSE 0 END AS Match2,
        CASE WHEN ISNULL(t1.Value3, 0) = ISNULL(t2.Value3, 0) THEN 1 ELSE 0 END AS Match3
FROM tblUserSettings t1
INNER JOIN tblUserSettings t2 ON t1.CountryID = t2.CountryID 
           AND t1.UserType = t2.UserType
           AND t1.CityID = 3
           AND t2.CityID = 20
WHERE t1.CountryID = 9

它給了我以下結果,我必須進一步處理以定義是否所有內容都匹配。

| Match1 | Match2  | Match3 |
| 1      | 1       | 1      |
| 1      | 1       | 1      |
| 1      | 1       | 1      |
| 0      | 0       | 0      |

我能以某種方式使輸出中只有一列和一行嗎?-對於所有匹配項,只接收1;如果至少一個不匹配,則只接收0?

如果您希望在所有值都匹配時只獲得包含1一列,如果不匹配則返回0 ,請使用,

SELECT 
CASE WHEN ISNULL(t1.Value1, 0) = ISNULL(t2.Value1, 0) 
      AND ISNULL(t1.Value2, 0) = ISNULL(t2.Value2, 0) 
      AND ISNULL(t1.Value3, 0) = ISNULL(t2.Value3, 0) 
THEN 1 ELSE 0 END AS Match
FROM tblUserSettings t1
INNER JOIN tblUserSettings t2 ON t1.CountryID = t2.CountryID 
           AND t1.UserType = t2.UserType
           AND t1.CityID = 3
           AND t2.CityID = 20
WHERE t1.CountryID = 9

如果您想比較所有城市而不只是兩個城市,則應該能夠通過分組而不是加入來進行比較。

就像是:

SELECT 
CASE WHEN
       max(Value1)-min(Value1) = 0
       AND max(Value2)-min(Value2) = 0
       AND max(Value3)-min(Value3) = 0
THEN 1 ELSE 0 AS Match
FROM tblUserSettings
GROUP BY CountryID,UserType

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM