首页 > 解决方案 > 如何编写从源数据表计算结果集列的 SQL 查询

问题描述

我有一个类似于下一个示例的数据表(#t_timevalue):

Time    Value
-------------
t1        v1
t1        v2
t1        v3
t2        v1
t2        v3
t3        v1
t4        v2
t4        v3

我正在尝试创建一个查询来汇总数据,如下所示:

Time  v1   v2   v3
t1    1    1    1
t2    1    0    1
t3    1    0    0
t4    0    1    1

where (ti,vj) = 1 if record (ti,vj) record appeared in #t_timevalue
      (ti,vj) = 0 elsewhere

是否可以使用 SQL 产生这样的输出?

或者至少是目标摘要信息:

1    1    1
1    0    1
1    0    0
0    1    1

编辑

该列Value包含未知值,它们的数量似乎很大。将这个报告推送到应用层而不是数据库来操作的推荐解决方案是什么?

标签: sqlsql-server

解决方案


枢轴运算符也适用于您。

create table testrr
(
[Time] varchar(30),
[Value] varchar(30)
)

insert into testrr values
('t1','v1'),
('t1','v2'),
('t1','v3'),
('t2','v1'),
('t2','v3'),
('t3','v1'),
('t4','v2'),
('t4','v3')

SELECT 
[Time],[v1],[v2],[v3]
FROM
(
SELECT 
[Time],[Value],1 AS NUMBER
FROM testrr
) SRC
PIVOT
(
 count(NUMBER) FOR [Value] IN ([v1],[v2],[v3])
) pvt

--Output
/*
Time                           v1          v2          v3
------------------------------ ----------- ----------- -----------
t1                             1           1           1
t2                             1           0           1
t3                             1           0           0
t4                             0           1           1
*/

此致,

将要


推荐阅读