-2

我有这张桌子TAB

ID | Trans
------------
1  | 99
2  | 99
3  | 99
2  | 90
4  | 22
4  | 22
2  | 99
2  | 90

我想获取单个 id 一起出现的 trans 的计数,例如,'1 有 90 和 99','2 有 90 和 99' 在整个表中,所以计数为 2。这类似于 Apriori 算法第三步。

我试过这个,但没有奏效-

select 
    count(trans) 
from 
    Tab 
where 
    trans = 99 & 90  
group by 
    ID 
having 
    ID = 2

我对 Trans- 90 和 99 的预期答案是

翻译1 | 反式2 | 支持 - - - - - -

90 | 99 | 1

我也想把它插入到一个新表中。

4

1 回答 1

0

如果我正确理解了您的问题,您可以使用SUM(CASE WHEN...END)

DECLARE 
    @trans1 INT = 99,
    @trans2 INT = 90

SELECT
    ID,
    PairCount =
        CASE 
            WHEN SUM(CASE WHEN Trans = @trans1 THEN 1 ELSE 0 END) >= SUM(CASE WHEN Trans = @trans2 THEN 1 ELSE 0 END)
                THEN SUM(CASE WHEN Trans = @trans2 THEN 1 ELSE 0 END)
            ELSE SUM(CASE WHEN Trans = @trans1 THEN 1 ELSE 0 END)
        END,
    Trans1 = SUM(CASE WHEN Trans = @trans1 THEN 1 ELSE 0 END),
    Trans2 = SUM(CASE WHEN Trans = @trans2 THEN 1 ELSE 0 END)
FROM DS
WHERE Trans IN (@trans1, @trans2)
GROUP BY ID

结果

ID          PairCount   Trans1      Trans2
----------- ----------- ----------- -----------
1           0           1           0
2           2           2           2
3           0           1           0
于 2015-03-10T08:34:46.783 回答