2

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)

すべてのフィルターグループに存在する PART & LOT を探しています。フィルター グループは、ユーザーの選択に基づいて動的に生成されます。

提供されたデータを使用すると、すべてのフィルター グループに存在する唯一の項目であるため、1 つの項目 (例: 1377882157,1379436702) のみが返されます。

これは私が今持っているものです...それを行うためのより良い方法があるかどうか疑問に思っていましたか?

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_CNT を定義しなくてもよい方法を考えています。

4

2 に答える 2

2

@FILTER_CNTサブクエリに置き換えることができます

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

出力:

| | 一部 | ロット |
|------------|------------|
| | 1377882157 | 1379436702 |

これがSQLFiddleのデモです

于 2013-11-08T04:51:37.233 に答える
0

--DECLARE @FILTER_CNT INT --SET @FILTER_CNT = 5

use this instead

SELECT
    PART,
    LOT,count(FILTER) as FILTER_total_count
FROM @OUTPUT
GROUP BY PART,LOT
HAVING COUNT(FILTER)=(select count(distinct FILTER) from @OUTPUT)
于 2013-11-08T04:50:55.533 に答える