我正在使用 SQL Server 查询一些数据。数据如下所示:
ID | 指定级别 | 男人级别02ID | 人类等级03ID | 人类等级04ID | 男人等级05ID | 组织数 |
---|---|---|---|---|---|---|
11111 | 1 | 2 | ||||
22222 | 2 | 11111 | 44444 | 55555 | 66666 | 1 |
33333 | 3 | 11111 | 22222 | 55555 | 66666 | 0 |
在此示例中,我尝试找出名为 的列中的值OrgCount
。AssignedLevel + 1
告诉我要查看哪个 ManLevel 列。因此,对于第一行 ID 11111
,其指定级别为 1,这意味着我需要计算ManLevel02ID
与 匹配的列中的值ID
。
我正在尝试让它发挥作用。
SELECT
[ID],
[AssignedLevel],
[ManLevel02ID],
[ManLevel03ID],
[ManLevel04ID],
[ManLevel05ID],
CASE
WHEN ([AssignedLevel] + 1) = 2
THEN SUM(CASE WHEN [ManLevel02ID] = [ID] THEN 1 ELSE 0 END)
WHEN ([AssignedLevel] + 1) = 3
THEN SUM(CASE WHEN [ManLevel03ID] = [ID] THEN 1 ELSE 0 END)
WHEN ([AssignedLevel] + 1) = 4
THEN SUM(CASE WHEN [ManLevel04ID] = [ID] THEN 1 ELSE 0 END)
WHEN ([AssignedLevel] + 1) = 5
THEN SUM(CASE WHEN [ManLevel05ID] = [ID] THEN 1 ELSE 0 END)
ELSE 0
END AS [OrgCount]
FROM
EmpTable
这对我来说不起作用,我不知道下一步该怎么办。
不要以为你可以避免自连接:
这将根据您的 AssignedLevel 逻辑将主表与其自身连接起来,然后将可用的 ID 聚合为 COUNT。
请注意,说实话这种结构并不是很好,如果有很多行,查询会很慢,但是,是的,这是一般的想法。
输出: