如何执行这项要求?

时间:2018-06-23 02:37:11

标签: sql sql-server-2008

我有桌子 **表格:**

MTID     code   boxnumber

1        10-01    10
1        10-02    10
1        10-03    10
1        10-04    10
1        10-05    10
1        11-01    11
1        11-02    11
1        11-03    11
1        11-04    11
1        11-05    11
1        12-01    12
1        12-02    12
1        12-03    12
2        13       NULL
2        14       NULL
2        15       NULL
2        16       NULL
2        17       NULL
2        18       NULL
2        19       NULL

要求:

返回结果,MTID 2所有行和

MTID 1表示满箱(count(boxnumber)= 5,其中MTID = 1)

在预期的结果中,代码= 12-xx WHERE MTID = 1不返回,因为它不是完整的框。

预期结果

MTID     code   boxnumber

1        10-01    10
1        10-02    10
1        10-03    10
1        10-04    10
1        10-05    10
1        11-01    11
1        11-02    11
1        11-03    11
1        11-04    11
1        11-05    11
2        13       NULL
2        14       NULL
2        15       NULL
2        16       NULL
2        17       NULL
2        18       NULL
2        19       NULL

任何人都可以帮忙吗? 谢谢。

1 个答案:

答案 0 :(得分:1)

我们可以在此处尝试使用COUNT作为分析函数来确定5个需求的计数。匹配的行属于MTID = 1,计数为5 boxnumber,或者MTID的其他值。

SELECT MTID, code, boxnumber
FROM
(
    SELECT *, COUNT(*) OVER (PARTITION BY MTID, boxnumber) cnt
    FROM yourTable
) t
WHERE (MTID = 1 AND cnt = 5) OR MTID <> 1;

Demo