程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了检查每列中存在哪些值(如果有)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决检查每列中存在哪些值(如果有)?

开发过程中遇到检查每列中存在哪些值(如果有)的问题如何解决?下面主要结合日常开发的经验,给出你关于检查每列中存在哪些值(如果有)的解决方法建议,希望对你解决检查每列中存在哪些值(如果有)有所启发或帮助;

我有一个表格,其列的标题是日期。每列(日期)都有一系列 ID,如下所示:

@H_784_7@mai/18
1 月 18 日 fev/18 三月/18 日 abr/18 jun/18 7 月 18 日 前/18 set/18
0000019 0000020 0000021 0000022 0000023 0000024 0000025 0000026 0000027
0000017 0000018 0000019 0000020 0000021 0000022 0000023 0000024 0000025
0000016 0000017 0000018 0000019 0000020 0000021 0000022 0000023 0000024
0000011 0000012 0000013 0000014 0000015 0000016 0000017 0000018 0000019
0000015 0000016 0000017 0000018 0000019 0000020 0000021 0000022 0000023
0000010 0000011 0000012 0000013 0000014 0000015 0000016 0000017 0000018
0000002 0000003 0000004 0000005 0000006 0000007 0000008 0000009 0000010
0000009 0000010 0000011 0000012 0000013 0000014 0000015 0000016 0000017
0000018 0000019 0000020 0000021 0000022 0000023 0000024 0000025 0000026
0000004 0000005 0000006 0000007 0000008 0000009 0000010 0000011 0000012
0000007 0000008 0000009 0000010 0000011 0000012 0000013 0000014 0000015
0000003 0000004 0000005 0000006 0000007 0000008 0000009 0000010 0000011
0000008 0000009 0000010 0000011 0000012 0000013 0000014 0000015 0000016
0000014 0000015 0000016 0000017 0000018 0000019 0000020 0000021 0000022
0000001 0000002 0000003 0000004 0000005 0000006 0000007 0000008 0000009
0000006 0000007 0000008 0000009 0000010 0000011 0000012 0000013 0000014
0000005 0000006 0000007 0000008 0000009 0000010 0000011 0000012 0000013
0000012 0000013 0000014 0000015 0000016 0000017 0000018 0000019 0000020
0000013 0000014 0000015 0000016 0000017 0000018 0000019 0000020 0000021

我需要找出每一列中存在哪些 ID。例如,我知道 ID 000009 到 000019 出现在从 jan/2018 到 set/2018 的每一列中。

有没有办法列出 sql Server 2012 中每一列中存在的所有 ID?

解决方法

使用 SQL Intersect 查找多个查询的共同结果,在这种情况下,将每一列作为单独的查询进行查询,然后将结果相交

SELECT [jan/18] FROM table.data
INTERSECT
SELECT [fev/18] FROM table.data
INTERSECT
SELECT [mar/18] FROM table.data
INTERSECT
SELECT [abr/18] FROM table.data
INTERSECT
SELECT [mai/18] FROM table.data
INTERSECT
SELECT [jun/18] FROM table.data
INTERSECT
SELECT [jul/18] FROM table.data
INTERSECT
SELECT [ago/18] FROM table.data
INTERSECT
SELECT [set/18] FROM table.data
,

我倾向于使用 apply 来反透视数据然后聚合:

SELEct col
from t cross apply
     (values (t.[jan/18],1),(t.[fev/18],2),. . .
     ) v(col,which)
group by col
having count(disTinct which) = 12;

intersect 相比,它的优势在于它只扫描表一次。 Intersect 删除重复项,这在性能上应该与 group by 类似——但是,我不确定一系列 intersect 是否将它们删除一次或 11 次。从性能角度来看,这似乎更安全。

大佬总结

以上是大佬教程为你收集整理的检查每列中存在哪些值(如果有)全部内容,希望文章能够帮你解决检查每列中存在哪些值(如果有)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: