2017-03-03 6 views
1
entfernen

Nicht sicher, ob der Titel korrekt ist, aber ich war ein wenig unsicher, wie man es anspricht. Ich habe eine Tabelle von circumstances und ich muss bestimmte Fragen basierend auf der Gruppe der circumstances angesichts der übergebenen Daten zeigen.SQL Server - Ergebnisse mit NULL in Gruppe

Meine in Daten übergeben wie folgt aussieht:

---------------------------------------------------- 
| CircumstanceTypeGiven | CircumstanceValueGiven | 
---------------------------------------------------- 
|  Equipment  |   X   | 
---------------------------------------------------- 
|  Customer   |  BEEFORE   | 
---------------------------------------------------- 

Meine CircumstanceMaster Tabelle sieht wie folgt aus:

-------------------------------------------------- 
| ID | CircumstanceType | GroupID | Value | 
-------------------------------------------------- 
| 1 | Equipment  | 1  | Reefer | 
-------------------------------------------------- 
| 2 | Customer  | 1  | BEEFOR | 
-------------------------------------------------- 

Ich habe dann einen Tisch bekam, die für die Frage-IDs hält die Gruppen mögen so:

-------------------------------------------------- 
| ID | CircumstanceGroupID | QuestionID  | 
-------------------------------------------------- 
| 1 |   1   |   1   | 
-------------------------------------------------- 

Meine Frage Tabelle:

-------------------------------------------------- 
| ID | Question         | 
-------------------------------------------------- 
| 1 | This is my question for Reefer & BEEFOR | 
-------------------------------------------------- 

Also, ich bin immer einen Gerätetyp X und einen Kundenwert von BEEFOR geben. Mein Umstand Tabelle sagt, dass, wenn ich Reefer geben binundBEEFORE, dann brauche ich für groupID 1. Aber die Fragen zu bekommen, ich weiß nicht, die Fragen will, wenn nur 1 in (das Szenario vergangen I gebe ich).

Hier ist die SQL:

CREATE TABLE CircumstanceMaster 
(
    CircumstanceID INT NOT NULL PRIMARY KEY IDENTITY(1,1), 
    CircumstanceGroupID INT NOT NULL, 
    CircumstanceType INT NOT NULL, 
    CircumstanceValue VARCHAR(MAX) NOT NULL 
) 
INSERT INTO CircumstanceMaster (CircumstanceType, CircumstanceGroupID, CircumstanceValue) VALUES (1, 1, 'R') 
INSERT INTO CircumstanceMaster (CircumstanceType, CircumstanceGroupID, CircumstanceValue) VALUES (2, 1, 'DEEFOR') 


CREATE TABLE QuestionMaster 
(
    QuestionID INT NOT NULL PRIMARY KEY IDENTITY(1,1), 
    Question VARCHAR(MAX) NOT NULL 
) 
INSERT INTO QuestionMaster (Question) VALUES ('Reefer & DEEFOR question') 


CREATE TABLE CircumstanceQuestion 
(
    ID INT NOT NULL PRIMARY KEY IDENTITY(1,1), 
    CircumstanceGroupID INT NOT NULL, 
    QuestionID INT NOT NULL 
) 
INSERT INTO CircumstanceQuestion (CircumstanceGroupID, QuestionID ) VALUES (1, 1) 

declare @given Table(CircumstanceTypeGivenID INT, CircumstanceValueGiven varchar(50)) 
insert into @given(CircumstanceTypeGivenID,CircumstanceValueGiven) VALUES (1, 'X') 
insert into @given(CircumstanceTypeGivenID,CircumstanceValueGiven) VALUES (2, 'DEEFOR') 



select * 
from CircumstanceMaster cm 
    left outer join @given g on cm.CircumstanceType=g.CircumstanceTypeGivenID and cm.CircumstanceValue=g.CircumstanceValueGiven 

Ich erhalte dieses Ergebnis, wenn ich zu meinem circumstancemaster Tisch verbinden. Ich erwarte, dass das Ergebnis, aber ich brauche eine Möglichkeit, zu sagen: „Wenn eine der Zeilen in der gleichen Gruppe Nullwert hat, nichts zurückgeben“:

---------------------------------------------------------------- 
| CircumstanceID | CircumstanceGroupID | CircumstanceValueGiven| 
---------------------------------------------------------------- 
|  1  |   1   |   NULL   | 
---------------------------------------------------------------- 
|  2  |   1   |  BEEFOR   | 
---------------------------------------------------------------- 
+0

Was meinst du, wenn alle Zeilen einen geraden Nullwert haben, zeige nicht alle Ergebnisse an? oder nur die Zeile anzeigen hat keinen Nullwert –

Antwort

1

Versuchen Sie folgendes:

select CircumstanceGroupID 
from CircumstanceMaster cm 
left join @given g on cm.CircumstanceType=g.CircumstanceTypeGivenID and cm.CircumstanceValue=g.CircumstanceValueGiven 
group by CircumstanceGroupID 
having sum(case when CircumstanceValueGiven is null then 0 else 1 end) = count(*) 

Zurück in Ihrem original question können Sie einen anderen Ansatz finden.