SQL-CASE WHEN语句,未完全工作
大家早上好 首先,我对SQL非常陌生,我还处于学习阶段 我对我认为是一个简单的“CASE-WHEN”陈述感到非常沮丧 我目前正在尝试将一个位置的所有不同属性类型拉成是或否(空白字段)格式 附加的SQL图表窗格、条件窗格、SQL窗格和结果的屏幕截图 SQL代码:SQL-CASE WHEN语句,未完全工作,sql,sql-server,Sql,Sql Server,大家早上好 首先,我对SQL非常陌生,我还处于学习阶段 我对我认为是一个简单的“CASE-WHEN”陈述感到非常沮丧 我目前正在尝试将一个位置的所有不同属性类型拉成是或否(空白字段)格式 附加的SQL图表窗格、条件窗格、SQL窗格和结果的屏幕截图 SQL代码: SELECT DISTINCT TOP (100) PERCENT dbo.ih_location.place_ref, dbo.co_place.address##1, dbo.co
SELECT DISTINCT
TOP (100) PERCENT dbo.ih_location.place_ref, dbo.co_place.address##1, dbo.co_place.address##2, dbo.ih_location.location_type,
CASE WHEN (dbo.ih_loc_attr.attrib_code = '10%T') THEN 'Yes' ELSE '' END AS [10%T],
CASE WHEN (dbo.ih_loc_attr.attrib_code = 'EPCB') THEN 'Yes' ELSE '' END AS EPCB, CASE WHEN (dbo.ih_loc_attr.attrib_code = 'GR1') THEN 'Yes' ELSE '' END AS GR1,
CASE WHEN (dbo.ih_loc_attr.attrib_code = 'SAP') THEN 'Yes' ELSE '' END AS SAP, CASE WHEN (dbo.ih_loc_attr.attrib_code = 'SOCH') THEN 'Yes' ELSE '' END AS SOCH, dbo.ih_loc_attr.attrib_code
FROM
dbo.co_place LEFT OUTER JOIN
dbo.ih_loc_attr ON dbo.co_place.place_ref = dbo.ih_loc_attr.place_ref RIGHT OUTER JOIN
dbo.ih_location ON dbo.co_place.place_ref = dbo.ih_location.place_ref
WHERE
(dbo.ih_location.place_ref = '00010001')
ORDER BY
dbo.ih_location.place_ref
正如您将看到的,我在6行中显示了这一点。理想情况下,我希望它显示在一行,但在不同的列标题
我希望我所说的有道理
这方面的任何帮助都将是惊人的
非常感谢
Stewart使用聚合:
SELECT l.place_ref, p.address##1, p.address##2, l.location_type,
MAX(CASE WHEN la.attrib_code = '10%T' THEN 'Yes' END) AS [10%T],
MAX(CASE WHEN la.attrib_code = 'EPCB' THEN 'Yes' END) AS EPCB,
MAX(CASE WHEN la.attrib_code = 'GR1' THEN 'Yes' END) AS GR1,
MAX(CASE WHEN la.attrib_code = 'SAP' THEN 'Yes' END) AS SAP,
MAX(CASE WHEN la.attrib_code = 'SOCH' THEN 'Yes' END) AS SOCH
FROM dbo.co_place p LEFT OUTER JOIN
dbo.ih_loc_attr la
ON p.place_ref =ila.place_ref RIGHT OUTER JOIN
dbo.ih_location l
ON p.place_ref = l.place_ref
WHERE l.place_ref = '00010001'
GROUP BY l.place_ref, p.address##1, p.address##2, l.location_type;
注:
- 使用表别名,可以使查询更易于编写和读取
- 我不建议使用
,但我没有修复查询的这一部分右外部联接
是不必要的。只需使用ELSE'
值,让聚合处理逻辑NULL
- 我不确定
分组依据中的其他列是否合适
SELECT l.place_ref, p.address##1, p.address##2, l.location_type,
MAX(CASE WHEN la.attrib_code = '10%T' THEN 'Yes' END) AS [10%T],
MAX(CASE WHEN la.attrib_code = 'EPCB' THEN 'Yes' END) AS EPCB,
MAX(CASE WHEN la.attrib_code = 'GR1' THEN 'Yes' END) AS GR1,
MAX(CASE WHEN la.attrib_code = 'SAP' THEN 'Yes' END) AS SAP,
MAX(CASE WHEN la.attrib_code = 'SOCH' THEN 'Yes' END) AS SOCH
FROM dbo.co_place p LEFT OUTER JOIN
dbo.ih_loc_attr la
ON p.place_ref =ila.place_ref RIGHT OUTER JOIN
dbo.ih_location l
ON p.place_ref = l.place_ref
WHERE l.place_ref = '00010001'
GROUP BY l.place_ref, p.address##1, p.address##2, l.location_type;
注:
- 使用表别名,可以使查询更易于编写和读取
- 我不建议使用
,但我没有修复查询的这一部分右外部联接
是不必要的。只需使用ELSE'
值,让聚合处理逻辑NULL
- 我不确定
分组依据中的其他列是否合适