【发布时间】:2016-09-09 23:37:35
【问题描述】:
我有一张桌子“BIRTH_ENTRY”和“DEATH_ENTRY”。两者都包含 ENTRY_DATE、SEX_ID 字段。
SEX_ID = 1 (MALE) & SEX_ID = 2 (FEMALE)
我想计算为 Birth & Death 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 次。好吧,这还不够好。
所以,请帮帮我。
提前致谢!
【问题讨论】:
-
您使用的是什么 DBMS,您的两个表 (
BIRTH_ENTRY, DEATH_ENTRY) 是什么样的?只有ENTRY_DATE and SEX_ID吗? -
你可以使用 over partition by 来解决这个问题。
-
我使用的是 SQL Server 2012,表是:BIRTH_ENTRY (ENTRY_DATE,SEX_ID) & DEATH_ENTRY(ENTRY_DATE,SEX_ID) @Cody360c
-
@KevalPandya 是
ENTRY_DATE日期时间吗? -
对不起,如果这很明显,但我不知道你在说什么。我不明白。 @海盗
标签: sql sql-server-2012