经过大量搜索web和Stackoverflow后,仍在寻找一种方法来使用ALIAS来返回列而不产生新的行/行。sql,case when then
以下工作创建列“Sig_1_Emp”和“Sig_3_Staff”,但Sig_1_Emp和Sig_3_Staff的数据不在同一行,而是两行。
CASE
WHEN VisitSignatures.order = 1 THEN Employees.last_name
END AS Sig_1_Emp,
CASE
WHEN VisitSignatures.order = 3 THEN Employees.last_name
END AS Sig_3_Staff
因此,会像下面的工作?
CASE WHEN VisitSignatures.order = 1 THEN Employees.last_name AS Sig_1_Emp
WHEN VisitSignatures.order = 3 THEN Employees.last_name AS Sig_3_Staff
END
下面是完整的查询:
Select
CV.clientvisit_id,
CV.program_id,
CV.visittype,
CV.non_billable,
CV.rev_timein,
CASE
WHEN CVSig.ord = 1 THEN Employees.last_name
ELSE Null
END AS Sig_1_Emp,
CASE
WHEN CVSig.ord = 3 THEN Employees.last_name
ELSE Null
END AS Sig_3_Staff
From CV
Inner Join CVSig On CV.clientvisit_id = CVSig.clientvisit_id
Inner Join EmpSig On CVSig.employeesignature_id = EmpSig.employeesignature_id
Inner Join Employees On EmpSig.emp_id = Employees.emp_id
Where
CV.program_id In (121, 123)
And CV.rev_timein >= @param1
And CV.rev_timein <= DATEADD(d, 1, @param2)
和结果的一个样本:
+----------------+------------+-----------+------------+-----------+-------------+
| clientvisit_id | program_id | visittype | rev_timein | sig_1_emp | sig_3_staff |
+----------------+------------+-----------+------------+-----------+-------------+
| 1001 | 121 | M_Mgmnt | 7/1/2014 | | Nurse_Pat |
| 1001 | 121 | M_Mgmnt | 7/1/2014 | Doc_Sue | |
+----------------+------------+-----------+------------+-----------+-------------+
而这正是我希望acheive:
+----------------+------------+-----------+------------+-----------+-------------+
| clientvisit_id | program_id | visittype | rev_timein | sig_1_emp | sig_3_staff |
+----------------+------------+-----------+------------+-----------+-------------+
| 1001 | 121 | M_Mgmnt | 7/1/2014 | Doc_Sue | Nurse_Pat |
+----------------+------------+-----------+------------+-----------+-------------+
我对此感到抱歉,谢谢你耐心等待。 如果这不能说明我的问题,请删除这篇文章。
你不能给一个字段多个别名,所以底部'CASE'不起作用。一些示例数据和所需的输出将会很有帮助,同样,您使用的是哪个数据库? – 2014-10-03 19:21:20
尝试运行它,看看会发生什么。 (破坏者:它不会工作) – Siyual 2014-10-03 19:21:43
你似乎在寻找数据透视技术,但是你错过了一个重要的部分,聚合函数(通常是'MAX'):你的第一个代码片段应该是'SELECT MAX(CASE ... END) AS Sig_1_Emp,MAX(CASE ... END)AS Sig_3_staff,.... GROUP BY ...' – a1ex07 2014-10-03 19:27:01