2017-03-03 10 views
1

タイトルが適切かどうかはわかりませんが、どのように単語を書くのかが少し分かりませんでした。私はcircumstancesのテーブルを持っており、渡されたデータを与えられたcircumstancesのグループに基づいて特定の質問を表示する必要があります。SQL Server - グループ内でNULLを含む結果を削除する

私の本のように見えるデータで渡す:私は、質問IDを保持するテーブルを、その後持って

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

:私CircumstanceMaster表は次のようになります

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

グループはそうです:

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

私の質問表:

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

だから、私はXの機器の種類とBEEFORの顧客価値を渡さ取得しています。私の状況テーブルには、私は、シナリオ(1つだけが渡された場合しかし、私は質問をしたくない、私は冷蔵BEEFOREを通過していた場合、その後、私はgroupID 1の質問を取得する必要があると述べています贈り物)。ここで

は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 

私はcircumstancemasterテーブルまで参加したときに、私はこの結果を取得しています。私は、結果を期待するが、私は「同じグループ内の行のいずれかがNULL値を持っている場合は、何も返さない」と言う方法が必要です:

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(*) 

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

すべての行に1つのヌル値があってもすべての結果が表示されない場合はどういう意味ですか?または行がnull値を持たないことを表示するだけです –

答えて

1

はこれを試してみてくださいあなたのoriginal questionに戻って、別の方法を見つけることができます。

関連する問題