我想捕获与其他列出的项目同时发生的任何事件,以便我做进一步的工作。因此,如果项目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
答案 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。尝试起来比描述起来容易。