2016-11-10 9 views
0

Я хочу, чтобы проверить, существует данные в другой таблице ..SQL запрос IF EXISTS

Моей структура таблицы

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.id имеет отношение с DataFields.dataid (IndicatorData.id может имеют множественную комбинацию поля данных)

Таблица IndicatorData выборки данных:

enter image description here

Таблица поля данных выборки данных:

enter image description here

Query Я попытался:

Примечание: Я не буду проходить dataid, я буду пройти только поле 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

Когда я прохожу поле идентификатора, мне нужно, чтобы получить комбинацию значений с dataid.

Вывод должен вернуться, как это:

enter image description here

Просьба предложить, как я могу achive этот

+0

Ваш запрос выглядит хорошо для меня - то, что не работает? – cco

+0

вы можете увидеть Scaneiro # 1 и сравнить выход. Вы можете найти разницу –

+0

Не совсем понятно, что вы хотите, вы имеете в виду, что вам нужен только вывод идентификатора с одинаковым значением и с несколькими записями? то есть в выводе сценария 1 запись с id = 69137 НЕ является тем, что вы хотите в outuput? – jyao

ответ

0

делает эту работу для вас?

;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 

     ) 
Смежные вопросы