【发布时间】:2025-11-28 07:05:01
【问题描述】:
初始表:
Name Job1 Job2 Job3 Job4 Job5 Job6
--------------------------------------------------------------
A 34 0 66 0 0 0
B 33 33 33 1 0 0
C 100 0 0 0 0 0
D 50 0 0 0 0 50
输出表:
Name Max Job1 Job2 Job3 Job4 Job5 Job6
----------------------------------------------------------------------------
A Job3 34 0 66 0 0 0
B Job1;Job2;Job3 33 33 33 1 0 0
C Job1 100 0 0 0 0 0
D Job1;Job6 50 0 0 0 0 50
我需要获取 SQL Server 中具有最大值的行的作业名称(列名)。 由于 SQL 中没有“最大”功能,是否有其他方法可以执行此操作? (因为我至少有 50 个工作)
【问题讨论】:
-
修复你的设计,那就是解决方案。应该有 1 个工作列,而不是 50 个。
-
正如@Larnu 所说,您的设计不是最好的,但是如果您必须为这些表这样做,我建议先将每个名称插入临时/工作表,并将所有工作放在单独的行中,然后做最大。或者使用 CASE 语句(但这不好且慢)
-
其实我有不同部门的人。所以 Div1 有 Job1/2/3 而其他工作是 NULL,Div2 有 Job1/2/3/5/6 等等。每个人在每项工作中都有不同的产出。所以要么我可以有多行,每行有一个工作和容量,或者我可以有这样的设计。所以,案例陈述太慢了。
-
“所以要么我可以有多行,每行有一个 Job 和容量” 这就是正是你应该去的。
MAX(JobValue)比(SELECT MAX(JobValue) FROM (VALUES(Job1, Job2, Job3, ... Job49, Job50)V(JobValue))容易得多
标签: sql sql-server