![](/img/trans.png)
[英]SQL Server CE : how can I combine results of two queries into one row?
[英]How to combine results of two or more SQL queries in one row?
我有一张桌子“BIRTH_ENTRY”和“DEATH_ENTRY”。 两者都包含 ENTRY_DATE、SEX_ID 字段。
SEX_ID = 1 (MALE) & SEX_ID = 2 (FEMALE)
我想计算为出生和死亡 GROUP & ORDER BY MONTH(ENTRY_DATE) 完成的男性、女性和总计(男性 + 女性)条目的数量
例如
|Month|Born_Male|Born_Female|Total_Born|Died_Male|Died_Female|Total_Died|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
我用过这个 SQL:
SELECT
(*Query to select born Male*),
(*Query to select born Female*),
(*Query to select total born*),
(*Query to select died Male*),
(*Query to select died Female*),
(*Query to select total died*)
SELECT
(SELECT COUNT(SEX_ID) AS Expr1
FROM BIRTH_ENTRY
WHERE MONTH(ENTRY_DATE) = 1 AND (SEX_ID = 1)
GROUP BY MONTH(ENTRY_DATE)) AS Birth_Male_Count,
(SELECT COUNT(SEX_ID) AS Expr1
FROM BIRTH_ENTRY AS BIRTH_ENTRY_1
WHERE MONTH(ENTRY_DATE) = 1 AND (SEX_ID = 2)
GROUP BY MONTH(ENTRY_DATE)) AS Birth_Female_Count,
(SELECT COUNT(SEX_ID) AS Expr1
FROM BIRTH_ENTRY AS BIRTH_ENTRY_2
WHERE MONTH(ENTRY_DATE) = 1
GROUP BY MONTH(ENTRY_DATE)) AS Birth_Total_Count,
(SELECT COUNT(SEX_ID) AS Expr1
FROM DEATH_ENTRY
WHERE MONTH(ENTRY_DATE) = 1 AND (SEX_ID = 1)
GROUP BY MONTH(ENTRY_DATE)) AS Death_Male_Count,
(SELECT COUNT(SEX_ID) AS Expr1
FROM DEATH_ENTRY AS DEATH_ENTRY_1
WHERE MONTH(ENTRY_DATE) = 1 AND (SEX_ID = 2)
GROUP BY MONTH(ENTRY_DATE)) AS Death_Female_Count,
(SELECT COUNT(SEX_ID) AS Expr1
FROM DEATH_ENTRY AS DEATH_ENTRY_2
WHERE MONTH(ENTRY_DATE) = 1
GROUP BY MONTH(ENTRY_DATE)) AS Death_Total_Count
但如您所知,此查询将仅返回一行。 所以,我必须在所有 12 个月内写 12 次。 嗯,这还不够好。
所以,请帮帮我。
提前致谢!
我让这个查询使用一个非常小的数据池工作。 您必须对其进行测试,以查看它是否完全符合您的要求。
我使用的表格格式...
dbo.BIRTH - ENTRY (datetime), ID (int)
dbo.DEATH - ENTRY (datetime), ID (int)
;with cte (MONTH) AS (
SELECT 1
UNION ALL
SELECT MONTH + 1 FROM cte WHERE MONTH < 12
)
SELECT c.MONTH
, COUNT(CASE WHEN b.ID = 1 THEN 1 END) AS MALEBIRTH
, COUNT(CASE WHEN b.ID = 2 THEN 1 END) AS FEMALEBIRTH
, COUNT(CASE WHEN b.ID = 1 OR b.ID = 2 THEN 1 END) AS TOTALBIRTH
, (SELECT COUNT(CASE WHEN d.ID = 1 THEN 1 END) FROM DEATH d WHERE DATEPART(mm, d.ENTRY) = c.MONTH) AS MALEDEATH
, (SELECT COUNT(CASE WHEN d.ID = 2 THEN 2 END) FROM DEATH d WHERE DATEPART(mm, d.ENTRY) = c.MONTH) AS FEMALEDEATH
, (SELECT COUNT(CASE WHEN d.ID = 1 OR d.ID = 2 THEN 2 END) FROM DEATH d WHERE DATEPART(mm, d.ENTRY) = c.MONTH) AS TOTALDEATH
FROM BIRTH b FULL OUTER JOIN cte c ON DATEPART(mm, b.ENTRY) = c.MONTH
GROUP BY c.MONTH
这每个月都会显示(无论上面是否有任何东西)。 它还显示您想要的所有信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.