2017-06-25 50 views
1

從表DS我有其中用戶類型被存儲爲DS或兩者d &小號選擇用戶類型d OR S OR數據庫

像下方的SQL表,

ID TYPE 
1 D 
2 S 
3 D 
3 S 

預期結果:

  1. 檢查用戶屬於哪種類型D或S或兩者。
  2. 我爲d預計1,2 S,和3 d &小號

我已經寫了下面這是工作完全正常的查詢,但我還是覺得,查詢和邏輯可以在很大程度上實現更好的方法。

select case count(distinct TYPE) 
      when 2 then 'DS' 
      when 1 then (select top 1 TYPE from Table1) 
     end as TYPE 
from Table1 

邏輯上述查詢的:

  1. 獲取用戶的TYPE的計
  2. 如果count = 2然後返回 'DS'
  3. 否則如果count = 1然後返回用戶的類型(d或S)
+0

我使用mssql –

回答

1

如果您需要的類型和發生次數 你可以通過

SELECT type 
    ,COUNT(*) 
FROM table1 
WHERE type IN (
     'D' 
     ,'S' 
     ) 
GROUP BY type 

與一組,做或者如果你需要不同類型的數量和類型

SELECT user 
    ,COUNT(DISTINCT type) 
    ,CASE 
     WHEN COUNT(DISTINCT type) = 2 
      THEN 'DS' 
     ELSE MAX(type) 
     END 
    , 
FROM table1 
WHERE type IN (
     'D' 
     ,'S' 
     ) 
GROUP BY user 
+0

此查詢將返回2條記錄。對於任何D,或S或DS的用戶,我只需要1條記錄。 –

+0

請更新你的問題,並添加一個適當的數據樣本和預期的結果.. – scaisEdge

+0

無論如何回答更新與用戶的不同類型的數字的建議 – scaisEdge

0

您可以使用FOR XML PATH如下。我代表您的Table1作爲此腳本中的公用表:

;With Table1 (ID ,TYPE) as 
(
Select 1 , 'D' 
union 
Select 2 , 'S' 
union 
Select 3 , 'D' 
union 
Select 3 , 'S' 
) 


SELECT ID, (
    SELECT cast(Type as varchar(max)) 
    FROM Table1 as InnerTable1 
    where InnerTable1.ID = Table1.id 
    FOR XML PATH('') 
    ) 
from Table1 
group by ID