2016-08-19 6 views
0

私は2つのテーブル、すなわちMeasurement and Clinicalを持っています。Sql server異なる条件に基づいて同じテーブルから結果を選択するクエリ

問合せ:

ClientID | InputValue of(188) | InputValue of(198)| InputValue of(82) 
----------------------------------------------------------------------  
7  | Yes    | Yes    | Referred to Comm Pres 
6  | Yes    | null    | null 
5  | yes    | yes    | null 

:我々は唯一の入力値 "はい" と82値は唯一でなければなりません 'が188198を考慮する必要があり、次のように私はなりたい

CREATE TABLE Measurement 
(
    [MeasurementID] [int] IDENTITY(1,1) NOT NULL, 
    [CHID] [int] NOT NULL, 
    [MeasureID] [int] NOT NULL, 
    [InputValue] [varchar](80) NOT NULL, 
    [MeasurementDate] [datetime] NOT NULL 
) 

CREATE TABLE Clinical 
(
    [ClinicalID] [int] IDENTITY(1,1) NOT NULL, 
    [CHID] [int], 
    [ClientID] [int] NOT NULL 
) 

insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(111,118,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(112,198,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(112,82,'Referred to Comm Pres',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(113,118,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(114,198,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(114,82,'Referred to Comm Pres',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(115,118,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(115,198,'No',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(115,82,'Referred to Comm Pres',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(116,118,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(116,198,'No',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(116,82,'Univeristy',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(117,188,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(117,198,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(117,82,'Univeristy',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(200,188,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(201,198,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(202,82,'Univeristy',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(203,188,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(203,198,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(205,188,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(203,5000,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(203,500,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(205,1555,'NO',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(207,188,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(208,198,'Yes',19-10-2016) 
insert into Measurement(CHID,MeasureID,InputValue,MeasurementDate) values(209,82,'Referred to Comm Pres',19-10-2016) 

insert into Clinical(CHID,ClientID) values(111,1) 
insert into Clinical(CHID,ClientID) values(112,1) 
insert into Clinical(CHID,ClientID) values(113,2) 
insert into Clinical(CHID,ClientID) values(114,2) 
insert into Clinical(CHID,ClientID) values(115,2) 
insert into Clinical(CHID,ClientID) values(116,3) 
insert into Clinical(CHID,ClientID) values(117,4) 
insert into Clinical(CHID,ClientID) values(200,4) 
insert into Clinical(CHID,ClientID) values(201,4) 
insert into Clinical(CHID,ClientID) values(202,4) 
insert into Clinical(CHID,ClientID) values(203,5) 
insert into Clinical(CHID,ClientID) values(205,6) 

insert into Clinical(CHID,ClientID) values(207,7) 
insert into Clinical(CHID,ClientID) values(208,7) 
insert into Clinical(CHID,ClientID) values(209,7) 

Comm Presを参照してください。

誰でも私にこれを助けてください。あなたは、私は以下に示すように、次の

with Table1 AS 
(
    select 
     CH.ClientID, CM.* 
    from 
     Measurement CM 
    inner join 
     Clinical CH ON CM.CHID = CH.CHID 
    where 
     MeasureID in (188, 198, 82) 
) 
select 
    T1.ClientID, T1.MeasurementID, T1.MeasureID, T1.CHID, 
    T1.InputValue, T2.InputValue, T3.InputValue, T1.MeasurementDate 
from 
    Table1 T1 
join 
    Table1 T2 on (T1.ClientID = T2.ClientID) 
join 
    Table1 T3 on (T2.ClientID = T3.ClientID) 
where 
    T2.MeasureID = 198 
    and lower(T2.InputValue) = 'yes' 
    and t3.MeasureID = 82 
    and T1.MeasureID = 188 
    and lower(T1.InputValue) = 'yes' 
    and T1.ClientID not in (select ClientID 
          from Table1 
          where MeasureID = 82 
           and InputValue not in ('Referred to Comm Pres')) 
group by 
    T1.ClientID, T1.MeasurementID, T1.MeasureID, T1.CHID, 
    T1.InputValue, T2.InputValue, T3.InputValue, T1.MeasurementDate 
order by 
    T1.MeasurementDate, T1.MeasurementID, T1.CHID, T1.MeasureID 
+0

あなたがこれまでに試したものを投稿してください.. – StackUser

+0

私は私が=上記の答えは多少働いているが、それはまた、82の値を持つクライアントを示している、これまで –

答えて

0

は、SQLサーバーのPIVOTを使用してみてくださいしようとしたあなた

よりclarification.Thankが必要な場合はコメントしてください。

SELECT CLIENTID, 
     CASE WHEN [188] = 'YES' THEN [188] ELSE NULL END AS [InputValue of(188)] , 
     CASE WHEN [198] = 'YES' THEN [198] ELSE NULL END AS [InputValue of(198)], 
     CASE WHEN [82] = 'Referred to Comm Pres' THEN [82] ELSE NULL END AS [InputValue of(82)] 
FROM (
    SELECT B.ClientID,A.MEASUREID,A.InputValue,Row_Number() over(order by clientid) as ID -- Pivot grouping column 
    FROM Measurement A 
    INNER JOIN Clinical B 
    ON A.CHID = B.CHID 
    WHERE A.MEASUREID IN (188, 198, 82) 
) as s 
PIVOT 
(
    MIN(InputValue) 
    FOR MEASUREID IN ([188], [198], [82]) 
)AS pvt 
+0

を試してみましたが、どのような追加示すべきではない「大学」クライアントのエントリが複数ある場合は、別々の行として表示する必要があります。 –

+0

@ adi_2010すべてのクライアントを個別の行として表示するように変更しました。私はかなり "大学"のフィルタにあなたのコメントを理解していないが、私はそれが自明でなければならないとあなた自身のクエリを変更することができるはずだと思います。 – Muthukumar

関連する問題