sql - 在sql server中将所有行转换为不同的行
问题描述
我有一个存储过程,它根据他们所属的子部门显示医生列表及其详细信息。下面是存储过程:
CREATE PROCEDURE SP_BILL_FOOTER_DOCTOR
@subDepartmentId int
AS
BEGIN
SELECT HETC_MST_EMPLOYEE.EMPLOYEE_NAME,
HETC_PAR_EMPLOYEE_TYPE.EMPLOYEE_TYPE_NAME,
HETC_MST_DOCTOR_SPECIALITY.DOCTOR_SPECIALITY_DESCRIPTION,
HETC_MST_SUB_DEPARTMENT.SUB_DEPARTMENT_NAME,
HETC_MST_EMPLOYEE.DOCTOR_SIGNATURE,
CASE WHEN HETC_MST_EMPLOYEE.DOCTOR_SIGNATURE = ''
THEN ''
ELSE ISNULL(SIGNATURE_PATH.DOCUMENT_PATH,'')+ HETC_MST_EMPLOYEE.DOCTOR_SIGNATURE
END AS DOCTOR_SIGNATURE_PIC
FROM HETC_MST_EMPLOYEE
INNER JOIN HETC_PAR_EMPLOYEE_TYPE
ON HETC_PAR_EMPLOYEE_TYPE.EMPLOYEE_TYPE_ID = HETC_MST_EMPLOYEE.EMPLOYEE_TYPE_ID
INNER JOIN HETC_MST_DOCTOR_SPECIALITY
ON HETC_MST_DOCTOR_SPECIALITY.DOCTOR_SPECIALITY_ID = HETC_MST_EMPLOYEE.DOCTOR_SPECIALITY_ID
INNER JOIN HETC_MST_DOCTOR_DEPARTMENT
ON HETC_MST_DOCTOR_DEPARTMENT.EMPLOYEE_ID = HETC_MST_EMPLOYEE.EMPLOYEE_ID
INNER JOIN HETC_MST_SUB_DEPARTMENT
ON HETC_MST_SUB_DEPARTMENT.SUB_DEPARTMENT_ID = HETC_MST_DOCTOR_DEPARTMENT.SUB_DEPARTMENT_ID
LEFT JOIN (SELECT DOCUMENT_PATH
FROM HETC_MST_DOCUMENT_PATH
INNER JOIN HETC_MST_TYPE_OF_ATTACHMENT
ON HETC_MST_DOCUMENT_PATH.TYPE_OF_DOCUMENT_ID = HETC_MST_TYPE_OF_ATTACHMENT.TYPE_OF_DOCUMENT_ID
WHERE HETC_MST_TYPE_OF_ATTACHMENT.TYPE_OF_DOCUMENT_CODE='DSI') AS DOC_SIGNATURE_PIC
ON 1=1
WHERE HETC_MST_SUB_DEPARTMENT.SUB_DEPARTMENT_ID = @subDepartmentId
END
以下是程序执行时的输出链接:
我想知道是否可以转换不同列中的行。就像输出有 6 列和 2 行一样,我想要 1 行 12 列中的所有数据。以下是示例输出:
如果有人可以指导我如何做到这一点,那将是非常有帮助的。我知道通过在 Sql 中使用 Pivot,我可以实现这一点,但我没有发现我的具体情况。
解决方案
这并不是真正的答案,而是展示了使用别名可以在多大程度上提高查询的易读性。信不信由你,这与您发布的内容完全相同。我只是使用了别名,因此您可以阅读此内容,而不是查看一堵墙。唯一实际的变化是在 1 = 1 上使用交叉连接而不是左连接。
SELECT e.EMPLOYEE_NAME,
et.EMPLOYEE_TYPE_NAME,
s.DOCTOR_SPECIALITY_DESCRIPTION,
sd.SUB_DEPARTMENT_NAME,
e.DOCTOR_SIGNATURE,
CASE WHEN e.DOCTOR_SIGNATURE = ''
THEN ''
ELSE ISNULL(SIGNATURE_PATH.DOCUMENT_PATH, '') + e.DOCTOR_SIGNATURE
END AS DOCTOR_SIGNATURE_PIC
FROM HETC_MST_EMPLOYEE e
INNER JOIN HETC_PAR_EMPLOYEE_TYPE et ON et.EMPLOYEE_TYPE_ID = e.EMPLOYEE_TYPE_ID
INNER JOIN HETC_MST_DOCTOR_SPECIALITY s ON s.DOCTOR_SPECIALITY_ID = e.DOCTOR_SPECIALITY_ID
INNER JOIN HETC_MST_DOCTOR_DEPARTMENT dd ON dd.EMPLOYEE_ID = e.EMPLOYEE_ID
INNER JOIN HETC_MST_SUB_DEPARTMENT sd ON sd.SUB_DEPARTMENT_ID = dd.SUB_DEPARTMENT_ID
cross join
(
SELECT DOCUMENT_PATH
FROM HETC_MST_DOCUMENT_PATH p
INNER JOIN HETC_MST_TYPE_OF_ATTACHMENT a ON p.TYPE_OF_DOCUMENT_ID = a.TYPE_OF_DOCUMENT_ID
WHERE a.TYPE_OF_DOCUMENT_CODE='DSI'
) AS DOC_SIGNATURE_PIC
WHERE sd.SUB_DEPARTMENT_ID = @subDepartmentId
对于手头的问题,很难说出您在这里真正想要什么。也许一些条件聚合与 ROW_NUMBER 结合使用。或枢轴。您需要为此发布更多详细信息。这是一个很好的起点。http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/
推荐阅读
- reactjs - React-native 无限重新渲染
- python - How to merger same column values based on other column values?
- typescript - TS: `unions can't be used in index signatures, use a mapped object type instead` 然后映射对象不作为字符串/数字传递
- python - 为什么“ModuleNotFoundError: No module named 'PyQt5'” 错误一直显示?
- session - 管道完成后詹金斯屏幕会话将被终止
- tcp - 源端口低于 1024 的 TCP/UDP IP 数据包是否可能
- c# - 在视图组件中找不到字段
- ios - Swift“无法将''类型的值转换为'String'类型
- python - 如何使用枚举计算条件循环中的项目?Python
- ajax - OpenWeatherMap API 调用“图标”不起作用