[英]sql-server: Combing these 2 queries results into 1
I have these 2 queries that create a rank list then I'm selecting a specific row from the result so both queries return 1 value each. 我有这两个创建排名列表的查询,然后从结果中选择特定的行,因此两个查询均返回1值。 How can I join the results so it returns them together.
如何合并结果,以便将它们一起返回。 Something with the logic of this:
符合逻辑的东西:
SELECT x.a, y.b FROM (SELECT * from a) as x, (SELECT * FROM b) as y
query1 查询1
declare @MainHospital varchar(50)='Hospital1';
WITH cte AS (
SELECT 4 score, growth1 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 3 score, growth2 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 2 score, growth3 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 1 score, growth4 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 0 score, growth5 area FROM Survey
WHERE MainHospital = @MainHospital
),
cte2 AS (
SELECT area, SUM(score) score FROM cte
GROUP BY area
HAVING area IS NOT NULL
),
cte3 AS (
SELECT area, score,
Row_Number() OVER (ORDER BY score DESC) row,
RANK() OVER (ORDER BY score DESC) rank
FROM cte2
)
SELECT top 1 area AS Growth
FROM cte3
WHERE row = 1
query2 query2
WITH Ecte AS (
SELECT 4 score, Efficiency1 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 3 score, Efficiency2 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 2 score, Efficiency3 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 1 score, Efficiency4 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 0 score, Efficiency5 area FROM Survey
WHERE MainHospital = @MainHospital
), Ecte2 AS (
SELECT area, SUM(score) score FROM Ecte
GROUP BY area
HAVING area IS NOT NULL
), Ecte3 AS (
SELECT area, score,
Row_Number() OVER (ORDER BY score DESC) row,
RANK() OVER (ORDER BY score DESC) rank
FROM Ecte2
)
SELECT TOP 1 area as Efficiency
FROM Ecte3
WHERE row = 1
Have you looked into UNION
/ UNION ALL
? 您是否看过
UNION
/ UNION ALL
? You must have the same # of columns in each return for this to work. 您必须在每个返回中具有相同的列数,此功能才能起作用。
ex: 例如:
SELECT COL1, COL2, COL3 FROM TABLE1
UNION ALL
SELECT COL1, COL2, COL3 FROM TABLE2
For CTE's do the following: 对于CTE,请执行以下操作:
;WITH CTE1 (col1, col2)
AS
(
SELECT col1, col2
FROM ...
)
, CTE2 (col1, col2)
AS
(
SELECT col1, col2
FROM ....
)
SELECT col1, col2
FROM CTE1
WHERE something = true
UNION ALL
SELECT col1, col2
FROM CTE2
WHERE something = true
NB: UNION ALL
will return duplicate rows, UNION
will eliminate identical rows as if it were GROUP BY
on every column selected. 注意:
UNION ALL
将返回重复的行, UNION
将消除相同的行,就好像所选的每一列上的GROUP BY
。
Your code would change as follows: 您的代码将更改如下:
declare @MainHospital varchar(50)='Hospital1';
WITH cte AS (
SELECT 4 score, growth1 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 3 score, growth2 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 2 score, growth3 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 1 score, growth4 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 0 score, growth5 area FROM Survey
WHERE MainHospital = @MainHospital
),
cte2 AS (
SELECT area, SUM(score) score FROM cte
GROUP BY area
HAVING area IS NOT NULL
),
cte3 AS (
SELECT area, score,
Row_Number() OVER (ORDER BY score DESC) row,
RANK() OVER (ORDER BY score DESC) rank
FROM cte2
),
Ecte AS (
SELECT 4 score, Efficiency1 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 3 score, Efficiency2 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 2 score, Efficiency3 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 1 score, Efficiency4 area FROM Survey
WHERE MainHospital = @MainHospital
UNION ALL
SELECT 0 score, Efficiency5 area FROM Survey
WHERE MainHospital = @MainHospital
), Ecte2 AS (
SELECT area, SUM(score) score FROM Ecte
GROUP BY area
HAVING area IS NOT NULL
), Ecte3 AS (
SELECT area, score,
Row_Number() OVER (ORDER BY score DESC) row,
RANK() OVER (ORDER BY score DESC) rank
FROM Ecte2
)
SELECT TOP 1 area as Efficiency
FROM Ecte3
WHERE row = 1
UNION ALL
SELECT top 1 area AS Growth
FROM cte3
WHERE row = 1
If you want the two value side by side, change the final query to this: 如果要同时使用两个值,请将最终查询更改为此:
SELECT TOP 1 T1.area as Efficiency, T2.area AS Growth
FROM Ecte3 T1, cte3 T2
WHERE T1.row = 1 AND T2.row = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.