2016-11-10 13 views
0

私がデータを確認したいが、別のテーブルに存在するEXISTS ..SQLクエリIF

私のテーブル構造

CREATE TABLE [dbo].[IndicatorData] 
(
    [id] [bigint] IDENTITY(1,1) NOT NULL, 
    [value] [float] NOT NULL, 
    [indicatorId] [int] NOT NULL, 
    [source] [nvarchar](500) NOT NULL, 
    [uploaded] [bit] NOT NULL, 
    [createdBy] [nvarchar](500) NULL, 
    [createdOn] [datetime] NULL, 
    [lastModifiedBy] [nvarchar](500) NULL, 
    [lastModifiedOn] [datetime] NULL 
) 

表2

CREATE TABLE [dbo].[DataFields] 
(
    [dataId] [bigint] NOT NULL, 
    [fieldId] [int] NOT NULL 
) 

IndicatorData.idDataFields.dataidIndicatorData.id缶と関係を持っていますデータフィールドの複数の組み合わせを持つ)

表IndicatorDataサンプルデータ:

enter image description here

表DataFieldsサンプルデータ:私が試し

enter image description here

クエリ:

:私は意志、データIDを通過しませんフィールドIDを渡す&インジケータID

シナリオ#1

SELECT * 
FROM IndicatorData a 
INNER JOIN DataFields b ON a.id = b.dataid 
WHERE a.indicatorid = 72 
    AND b.fieldid IN (59, 207) 

enter image description here

私は、フィールドIDを渡すと、私はデータIDと値の組み合わせを取得する必要があります。

出力は次のように返す必要があります:

enter image description here

親切に私はこの

+0

あなたのクエリは、私には正常に見える - 動作していないでしょうか? – cco

+0

あなたはScaneiro#1を見て、出力を比較することができます。違いを見つけることができます –

+0

あなたは何をしたいのかはっきりしません。同じ値のIDと複数のレコードの出力だけが必要なのですか?つまり、シナリオ1の出力では、id = 69137のレコードは、出力に必要なものではありませんか? – jyao

答えて

0

があなたのためにこの作業を行いachiveする方法を提案しますか?

;with c as (
SELECT a.id, cnt = count(*) from IndicatorData a 
INNER JOIN DataFields b ON a.id=b.dataid 
where a.indicatorid = 72 and b.fieldid in(59,207) 
group by a.id 
having count(*) > 1 
) 
select a.*, b.* from IndicatorData a INNER JOIN DataFields b 
ON a.id=b.dataid 
inner join c 
on a.id = c.id; 
0

私が正しく要件を理解していれば、あなたは以下の通りでした:

SELECT * from 
    IndicatorData a INNER JOIN 
    DataFields b ON a.id=b.dataid 
WHERE 
    a.indicatorid = 72 AND 
    a.id IN 
     (
      SELECT df.id FROM DataFields df 
      WHERE df.fieldid IN (59,207) 
      GROUP BY df.dataId HAVING COUNT(1) > 1 

     )