SQL:多重分组并分类为“ bin”

时间:2019-08-08 16:40:16

标签: sql ms-access

我想捕获与其他列出的项目同时发生的任何事件,以便我做进一步的工作。因此,如果项目1在实例1中与项目2和3一起出现,在实例2中与项目2和4一起出现,在实例3中与项目3和项目7一起出现,那么我的查询应该会导致列出项目1,项目2,项目3 ,项目4和项目7。

我相信这是MS SQL,因为我正在Access中编写它。

我首先在Excel中尝试过此操作,方法是在#,文档#(这些是我要整理的2),数据和数量上运行数据透视表,方法是将行和列混合在一起,有用。

<img>

这将导致

SELECT TK, DocumentNo Count(*)
FROM access3
GROUP BY Tk, DocumentNo;

但是我想说的是类似的东西

TK  DocumentNo  Expr1002
12364   SSPT267489  1
15826       1
16898   SSPT250724  1
17888   SSPT259200  1
17888   SSPT266740  1
17888   SSPT267709  1
17888   SSPT276036  1
18796   SSPT266145  1
18839   SSPT253433  1
18839   SSPT254744  1
19169   SSPT251179  1
19429   SSPT269249  1
19492   SSPT253796  1
19492   SSPT253797  1

原始数据示例

(17888
12364
5781
90592) 
(First grouping, parentheses to indicate that 1788 has occurred with all of these numbers AT SOME POINT in a Document No.)

(1293812
1238
1293801
12381)

(1230918
21391
312039)

etc

1 个答案:

答案 0 :(得分:0)

访问仅支持SQL的非常有限的子集,在某些情况下具有自己的独特语法。这可能是相当有限的,但在您的情况下就足够了。这里的窍门是将表自身连接起来。下面的代码可能并不完美,但是应该为您指明正确的方向。它不会提供您所描述的输出的确切格式,因为SQl并没有真正采用这种格式(尽管您可以根据实际需要这样做)。

SELECT DISTINCT a.TK, b.TK
FROM access3 a JOIN access3 b ON a.DocumentNo = b.DocumentNo
WHERE NOT a.TK=b.TK
ORDER BY a.TK,b.TK

这将为您提供一个包含两列的表格,第一列将按顺序列出所有TK(每次多次),第二列将包含它们一起出现的所有TK。尝试起来比描述起来容易。