Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL查询(如果存在)_Sql Server - Fatal编程技术网

Sql server SQL查询(如果存在)

Sql server SQL查询(如果存在),sql-server,Sql Server,我想检查另一个表中是否存在数据 我的桌子结构 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

我想检查另一个表中是否存在数据

我的桌子结构

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
数据字段有关系。dataid
IndicatorData.id
可以有多个数据字段组合)

表指示符数据样本数据:

表数据字段示例数据:

我尝试过的查询:

注意:我不会传递数据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) 

当我传递字段id时,我需要获得值与数据id的组合

输出应返回如下所示:


请建议我如何做到这一点

这对你有用吗

;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;

如果我正确理解要求,您可以如下所示:

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

        )

您的查询在我看来很好-什么不起作用?您可以查看Scaneiro#1并比较输出。。您可以找到不同之处不太清楚您想要什么,您的意思是您只想要具有相同值和多条记录的id的输出吗?i、 e.在场景1输出中,id=69137的记录不是您想要的输出?抱歉..我已经编辑了帖子…请检查它并让我知道您的建议鉴于您显示的数据,我看不出您如何确定id=69137应该被排除-您是否只查找给定指示器同时具有字段id 59和207的情况?