Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 是否有更好的方法过滤每个组中存在的数据?_Sql_Sql Server_Group By_Having Clause - Fatal编程技术网

Sql 是否有更好的方法过滤每个组中存在的数据?

Sql 是否有更好的方法过滤每个组中存在的数据?,sql,sql-server,group-by,having-clause,Sql,Sql Server,Group By,Having Clause,我正在尝试找出如何从SQL Server筛选数据集 DECLARE @OUTPUT AS TABLE (FILTER INT,PART INT,LOT INT) INSERT INTO @OUTPUT (FILTER,PART,LOT) VALUES (1,1377882157,1379436702), (1,1377882157,1382038239), (1,1377882157,1382038531), (3,1373463498,1380792160), (3,1377882157,13

我正在尝试找出如何从SQL Server筛选数据集

DECLARE @OUTPUT AS TABLE (FILTER INT,PART INT,LOT INT)
INSERT INTO @OUTPUT (FILTER,PART,LOT) VALUES
(1,1377882157,1379436702),
(1,1377882157,1382038239),
(1,1377882157,1382038531),
(3,1373463498,1380792160),
(3,1377882157,1379436702),
(4,1373638746,1382475541),
(4,1377882157,1379436702),
(5,1373463498,1380792160),
(5,1373463959,1380792272),
(5,1373464034,1380791899),
(5,1373638746,1379326622),
(5,1373638746,1382475541),
(5,1373638756,1383222295),
(5,1377882157,1379436702),
(5,1377882157,1382038239),
(5,1377882157,1382038531),
(5,1377882159,1383658054),
(8,1373638746,1379326622),
(8,1377882157,1379436702)
我正在寻找存在于每个过滤器组中的零件和批次。过滤器组根据用户选择动态生成

提供数据后,将只返回1项(例如1377882157139436702),因为它是所有过滤器组中唯一存在的一项

这就是我现在所拥有的…我想知道是否有更好的方法来做到这一点

DECLARE @FILTER_CNT INT
SET @FILTER_CNT = 5

SELECT
    F_PART,
    F_LOT
FROM @FILTERED_LOTS
GROUP BY F_PART,F_LOT
HAVING COUNT(FILTER) = @FILTER_CNT
我想的是一种不必定义FILTER\u CNT的方法。

--DECLARE@FILTER\u CNT INT
--设置@FILTER\u CNT=5

改用这个

SELECT
    PART,
    LOT,count(FILTER) as FILTER_total_count
FROM @OUTPUT
GROUP BY PART,LOT
HAVING COUNT(FILTER)=(select count(distinct FILTER) from @OUTPUT)

您可以用子查询替换
@FILTER\u CNT

SELECT PART, LOT
  FROM output
 GROUP BY PART, LOT
HAVING COUNT(FILTER) = 
(
  SELECT COUNT(DISTINCT FILTER) 
    FROM output
)
输出:

| PART | LOT | |------------|------------| | 1377882157 | 1379436702 | |第|部分地段| |------------|------------| | 1377882157 | 1379436702 |
这里是演示

它不会给出正确的结果,因为它不会检查每个组或组中的零件和批次not@Szymon它给出了期望的结果flexibility@jlimited有帮助吗?你的问题需要更多的帮助吗?