我当前正在使用SQL Server 2016从表中进行选择以输出不同的布局。下表implementation 'com.android.support:multidex:1.0.3'
:
item_stats
我正在尝试使用分组依据,甚至使用分区依据,但无法获得结果。我想得到以下输出:
code_no | code_status | code_category
--------+-------------+--------------
a123 | x | error1
a123 | y | error1
a123 | z | error1
a123 | x | error1
a123 | y | error2
b123 | x | error2
b123 | y | error2
c123 | y | error1
c123 | z | error1
基本上,结果将按code_no | x | y | z | code_category
--------+---+---+---+---------------
a123 | 2 | 1 | 1 | error1
a123 | 0 | 1 | 0 | error2
b123 | 1 | 1 | 0 | error2
c123 | 0 | 1 | 2 | error1
和code_no
分组,并分别将x,y和z的每个code_category
列为一列,并显示这些列中的出现次数。 / p>
感谢获得输出的任何帮助或指导。我尝试使用group by,但是布局不会将代码状态拆分为单独的列。
谢谢 A. Fai
答案 0 :(得分:0)
您可以尝试使用聚合函数条件来制作数据透视表。
select code_no,
SUM(CASE WHEN code_status = 'x' THEN 1 ELSE 0 END) x,
SUM(CASE WHEN code_status = 'y' THEN 1 ELSE 0 END) y,
SUM(CASE WHEN code_status = 'z' THEN 1 ELSE 0 END) z,
code_category
from t
group by code_no,code_category
[结果] :
| code_no | x | y | z | code_category |
|---------|---|---|---|---------------|
| a123 | 2 | 1 | 1 | error1 |
| c123 | 0 | 1 | 1 | error1 |
| a123 | 0 | 1 | 0 | error2 |
| b123 | 1 | 1 | 0 | error2 |
答案 1 :(得分:0)
使用 CASE
表达式。
查询
select [code_no],
sum(case [code_status] when 'x' then 1 end) as [x],
sum(case [code_status] when 'y' then 1 end) as [y],
sum(case [code_status] when 'z' then 1 end) as [z],
[code_category]
from [your_table_name]
group by [code_no], [code_category];
答案 2 :(得分:0)
select
code_no,
(select count(*) from item_stats where code_no=itst.code_no and code_status='x' and code_category=itst.code_category) as x,
(select count(*) from item_stats where code_no=itst.code_no and code_status='y' and code_category=itst.code_category) as y,
(select count(*) from item_stats where code_no=itst.code_no and code_status='z' and code_category=itst.code_category) as z,
code_category
from item_stats itst
group by code_no, code_category
order by code_no, code_category
答案 3 :(得分:0)
尝试以下查询-:
select code_no,
SUM(case when code_status='x' then 1 else 0 end) as [X],
SUM(case when code_status='y' then 1 else 0 end) as [Y],
SUM(case when code_status='z' then 1 else 0 end) as [Z],
code_category
from
[YOUR_TABLE_NAME]
group by code_no,code_category
order by code_no
使用静态旋转-:
select code_no,[X],[Y],[Z],code_category
from [YOUR_TABLE_NAME]
PIVOT
(
COUNT(code_status) for code_status in ([x],[y],[z])
)a
order by code_no
具有动态旋转--
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME(code_status)
FROM [YOUR_TABLE_NAME]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SELECT @query =
'SELECT code_no,'+@cols+',code_category FROM [YOUR_TABLE_NAME]
PIVOT
(
count(code_status)
for [code_status] in (' + @cols + ')
) P order by code_no'
EXEC SP_EXECUTESQL @query