在多个列中搜索多个变量,然后按变量名称进行拆分

时间:2016-05-19 16:31:12

标签: sql sql-server-2012

前言我是一个完整的SQL菜鸟,我知道这可能是一个非常简单的查询,但我在这里找不到任何帮助我的东西。谢谢你的时间。

我有几个列将事件编码发生在其中列出的人员身上。我想通过代码搜索(例如A106或B465)来计算事件发生的次数,无论它在哪一列。所以基本上搜索所有事件列并计算多少次4不同的事件出现,结果由事件代码分开。到目前为止,我的结构(可能是也可能不对)是:

SELECT COUNT()
FROM EVENTSLOG
WHERE EVENT1 IN ('A106', 'A107', 'B465', 'E713') OR
EVENT2 IN ('A106', 'A107', 'B465', 'E713') OR
EVENT3 IN ('A106', 'A107', 'B465', 'E713') OR
EVENT4 IN ('A106', 'A107', 'B465', 'E713')
GROUP BY

我知道这不是很多,但我已经写了大约100个其他代码片段,包括每次我和UNION所有列(对于保留关联的主键感到困惑) #39;我最终陷入了如何通过事件代码进行分割。

谢谢:)

更新

我希望得到的是

Event Code   Number of Events
=========== =================
A106         554
A107         4233
B465         4196
E713         34

我正在运行下面建议的代码,但它是一个庞大的数据集(我实际上是在搜索24个列中搜索7个代码,到目前为止,我的查询已经运行了很长时间) - 而且我没有' t还有任何产出。

第二次编辑

好的,只是从下面的建议答案中得到了查询结果..然后我找回了我正在寻找的表格大纲,但是当我知道有超过每个代码时,它只给出了1的计数那? 例如

CODE   CNT
====  ====
A105   1
A106   1
B465   1
E713   1
F432   1
F465   1
K364   1

1 个答案:

答案 0 :(得分:0)

只需要对所有4列进行联合:

select code, count(*) as cnt 
from(
     select event1 as code from log
     union all
     select event2 as code from log
     union all
     select event3 as code from log
     union all
     select event4 as code from log
    )t
where code in('A106', 'A107', 'B465', 'E713')
group by code