我已经搜索过,但是找不到我想要达到的目标的答案。举例来说,我有此数据。
|SN | column1 | column2 | column3 | column4 | column5 | column6 |
+------+-----------+----------+---------+---------+---------+---------+
|1 | orange | banana | apple | grapes | null | 555 |
|2 | banana | grapes | null | null | null | 555 |
|3 | grapes | orange | banana | null | null | 555 |
|4 | orange | banana | grapes | null | null | 555 |
我想要一个搜索,其中所有行在任何列中都有重复,并且column6为555。无论SN列如何,结果都将显示葡萄和香蕉。因为存在555,每行都有葡萄。请参阅下面的示例结果:
|SN | column1 | column2 | column3 | column4 | column5 | column6 |
+---+-----------+----------+----------+----------+---------+---------+
|1 | orange |**banana**| apple |**grapes**| null | 555 |
|2 |**banana** |**grapes**| null | null | null | 555 |
|3 |**grapes** | orange |**banana**| null | null | 555 |
|4 | orange |**banana**|**grapes**| null | null | 555 |
我尝试使用下面的计数和示例代码,但结果为空白。
select column1, column2, column3, column4, column5, COUNT(*)
From Sheet Group By
column1, column2, column3, column4, column5
Having
Count(*) > 1
输出应显示与香蕉/葡萄和555相同值的所有列
请帮助!
答案 0 :(得分:0)
您可以先取消旋转数据表,然后进行分组以找到所需的值。
您需要了解一些事情才能更好地理解答案。
对数据进行UNPIVOT处理的内容。在 MSDN official documentation 上了解有关此内容。
我们如何使用CROSS APPLY取消数据处理。例如,请参见 this link
请参阅下面的查询和 live demo
; with upview as
(
select yt.sn, ytc.col, column6
from yourtable yt
cross apply
( values (column1),(column2),(column3),(column4),(column5)) ytc(col)
)
,
gettheSN as
(
select col
from upview
where column6=555
group by col
having count(sn)=
(select count(1) from yourtable)
)
select * from gettheSN
现在,如果您需要取消透视其他列,请在column6之后再说column7和column8,我们不会取消透视,那么您的交叉应用部分将看起来像
cross apply
( values (column1),(column2),(column3),(column4),(column5), (column7),(column8)) ytc(col)
)