2017-04-21 2 views
2

Ich habe zwei Tabelle Eins ist Master-Tabelle und eine andere Tabelle können Sie Element aus der ersten Tabelle auswählen.SQL-Abfrage für CASE-Anweisung

MasterTable

ItemID  ItemName 
1   Football 
2   Cricket 
3   Badminton 

SelectionTable

UserID  SelectedItemId 
1   2 
1   3 
2   1 

OutPut

UserId  SelectedItemID  SelectionStatus 
1   1     False 
1   2     True 
1   3     True 

Abfrage

SELECT S.UserId,M.ItemID, 
     CASE M.ItemID 
      WHEN 1 Then 'True' 
      WHEN 2 Then 'True' 
      WHen 3 Then 'True' END AS SelectionStatus 
From MasterTable M 
JOIN SelectionTable S ON S.SelectedItemID=M.ItemID  
WHERE S.UserId=1 

Wenn kein Element ausgewählt ist, dann sind alle falsch. Ich weiß nicht, wie es geht.

+0

. und LINKS Beitritt Master zu Auswahl – xQbert

Antwort

1

Unter der Annahme, dass Sie eine User Tabelle haben, können Sie den Status jeder Benutzer/Stück Kombination erhalten, indem cartesean Produkt (Cross-Join) abfragt.

Der Status True oder False kann die Anwesenheit oder Abwesenheit eines entsprechenden Datensatzes in der SelectionTable ermittelt werden.

select 
    u.UserId, 
    m.ItemId, 
    case 
     when exists 
      (select * 
      from SelectionTable s 
      where s.UserId = u.UserId 
       and s.SelectedItemId = m.ItemId) 
     then 'True' 
     else 'False' 
    end 
from MasterTable m, User u 

Diese Technik kann auf den einzelnen Benutzer Fall angewendet werden (UserId gleich 1) wie folgt:

select 
    m.ItemId, 
    case 
     when exists 
      (select * 
      from SelectionTable s 
      where s.UserId = 1 
       and s.SelectedItemId = m.ItemId) 
     then 'True' 
     else 'False' 
    end 
from MasterTable m 
Ihre m.itemID zu S.SelectedItemID Schalter
+0

Ich habe nur zwei Tabelle, warum eine andere Tabelle annehmen? – Anjyr

+0

Wenn Sie eine 'UserId' haben, entspricht das normalerweise einem automatisch generierten Wert. Ich habe meine Antwort geändert, um für eine einzelne "UserId" zu arbeiten und verwendet nur die 2 angegebenen Tabellen. – dana

+1

übrigens verwende ich deine zweite Technik. Es funktioniert gut. – Anjyr

0

Sie können else und left join von SelectionTable bis MasterTable verwenden.

SELECT S.UserId,M.ItemID, 
     CASE M.ItemID 
      WHEN 1 Then 'True' 
      WHEN 2 Then 'True' 
      WHen 3 Then 'True' 
      else 'False' 
      END AS SelectionStatus 
From SelectionTable S 
    left JOIN MasterTable M ON S.SelectedItemID=M.ItemID  
WHERE S.UserId=1 
Verwandte Themen