【发布时间】:2018-03-07 10:36:26
【问题描述】:
我的查询有问题。
Msg 205, Level 16, State 1, Line 5 所有查询使用 UNION 组合, INTERSECT 或 EXCEPT 运算符必须有相等数量的表达式 在他们的目标列表中。
我是基本用户(仍在学习 SQL)。
我在这里将几个选择组合在一起我的代码:
我想把类别放在 FCRR 旁边。
我尝试了很多组合但都失败了:(
感谢您的帮助,
SELECT cast(100 * ([FCRR] / CASESCOUNT) AS DECIMAL(5, 2)) AS [FCRR]
,CATEGORY
FROM (
SELECT cast(count(*) AS DECIMAL(5, 2)) AS [FCRR]
,'1 Time' AS [CATEGORY]
,DATENAME(MONTH, [TICKET_CLOSED]) AS [MONTH_NAME]
,MONTH([TICKET_CLOSED]) AS [MONTH_NUMBER]
,YEAR([TICKET_CLOSED]) AS [YEARS]
FROM [PL_Survey]
WHERE [QUESTION6] = '1 Time' AND MONTH([TICKET_CLOSED]) = @MONTH AND [SUPPORT_GROUP] IN (@SUPPORT_GROUP)
GROUP BY Month([TICKET_CLOSED])
,YEAR([TICKET_CLOSED])
,DATENAME(MONTH, [TICKET_CLOSED])
) AS T1
,(
SELECT cast(count(*) AS DECIMAL(5, 2)) AS CASESCOUNT
,DATENAME(MONTH, [TICKET_CLOSED]) AS [MONTH NAME]
,MONTH([TICKET_CLOSED]) AS [MONTH]
,YEAR([TICKET_CLOSED]) AS [YEAR]
FROM [PL_Survey]
WHERE MONTH([TICKET_CLOSED]) = @MONTH AND [SUPPORT_GROUP] IN (@SUPPORT_GROUP)
GROUP BY Month([TICKET_CLOSED])
,YEAR([TICKET_CLOSED])
,DATENAME(MONTH, [TICKET_CLOSED])
) AS T2
UNION ALL
SELECT cast(100 * ([FCRR] / CASESCOUNT) AS DECIMAL(5, 2)) AS [FCRR]
FROM (
SELECT cast(count(*) AS DECIMAL(5, 2)) AS [FCRR]
,'2-3 Times' AS [CATEGORY]
,DATENAME(MONTH, [TICKET_CLOSED]) AS [MONTH_NAME]
,MONTH([TICKET_CLOSED]) AS [MONTH_NUMBER]
,YEAR([TICKET_CLOSED]) AS [YEARS]
FROM [PL_Survey]
WHERE [QUESTION6] = '2-3 Times' AND MONTH([TICKET_CLOSED]) = @MONTH AND [SUPPORT_GROUP] IN (@SUPPORT_GROUP)
GROUP BY Month([TICKET_CLOSED])
,YEAR([TICKET_CLOSED])
,DATENAME(MONTH, [TICKET_CLOSED])
) AS T1
,(
SELECT cast(count(*) AS DECIMAL(5, 2)) AS CASESCOUNT
,DATENAME(MONTH, [TICKET_CLOSED]) AS [MONTH NAME]
,MONTH([TICKET_CLOSED]) AS [MONTH]
,YEAR([TICKET_CLOSED]) AS [YEAR]
FROM [PL_Survey]
WHERE MONTH([TICKET_CLOSED]) = @MONTH AND [SUPPORT_GROUP] IN (@SUPPORT_GROUP)
GROUP BY Month([TICKET_CLOSED])
,YEAR([TICKET_CLOSED])
,DATENAME(MONTH, [TICKET_CLOSED])
) AS T2
UNION ALL
SELECT cast(100 * ([FCRR] / CASESCOUNT) AS DECIMAL(5, 2)) AS [FCRR]
FROM (
SELECT cast(count(*) AS DECIMAL(5, 2)) AS [FCRR]
,'More than 3 Times' AS [CATEGORY]
,DATENAME(MONTH, [TICKET_CLOSED]) AS [MONTH_NAME]
,MONTH([TICKET_CLOSED]) AS [MONTH_NUMBER]
,YEAR([TICKET_CLOSED]) AS [YEARS]
FROM [PL_Survey]
WHERE [QUESTION6] = 'More than 3 Times' AND MONTH([TICKET_CLOSED]) = @MONTH AND [SUPPORT_GROUP] IN (@SUPPORT_GROUP)
GROUP BY Month([TICKET_CLOSED])
,YEAR([TICKET_CLOSED])
,DATENAME(MONTH, [TICKET_CLOSED])
) AS T1
,(
SELECT cast(count(*) AS DECIMAL(5, 2)) AS CASESCOUNT
,DATENAME(MONTH, [TICKET_CLOSED]) AS [MONTH NAME]
,MONTH([TICKET_CLOSED]) AS [MONTH]
,YEAR([TICKET_CLOSED]) AS [YEAR]
FROM [PL_Survey]
WHERE MONTH([TICKET_CLOSED]) = @MONTH AND [SUPPORT_GROUP] IN (@SUPPORT_GROUP)
GROUP BY Month([TICKET_CLOSED])
,YEAR([TICKET_CLOSED])
,DATENAME(MONTH, [TICKET_CLOSED])
) AS T2
【问题讨论】:
-
错误信息很清楚。当 UNION 时,选择的列数必须相同。
-
为所有联合包括
category,将执行 -
... 或添加
null,如果您不需要它 -
谢谢B楼:)我是盲人。您的评论完成了工作:)
-
你的尝试很好+1
标签: sql sql-server