Sql 组合具有相同ID但不同的多行';是'/';否';多个列的值,一行显示所有';是'/';否';价值观

Sql 组合具有相同ID但不同的多行';是'/';否';多个列的值,一行显示所有';是'/';否';价值观,sql,Sql,对于上表,我需要将行减少到每个筛选器ID一行,并显示该特定筛选器ID的所有可能的是/否值 例如: 过滤器ID 门诊处方 类阿片门诊处方 ... IP药房医嘱-组件级别 1. 对 对 ... 不 如果我理解您的问题,对于FilterID值的每个分区,您希望任何具有“是”的字段聚合为“是”,否则为“否”。如果按FilterID分组,则可以使用案例和案例处理汇总 SELECT FilterID, Field1Response = CASE WHEN SUM(CASE WHEN Fiel

对于上表,我需要将行减少到每个筛选器ID一行,并显示该特定筛选器ID的所有可能的是/否值

例如:

过滤器ID 门诊处方 类阿片门诊处方 ... IP药房医嘱-组件级别 1. 对 对 ... 不
如果我理解您的问题,对于FilterID值的每个分区,您希望任何具有“是”的字段聚合为“是”,否则为“否”。如果按FilterID分组,则可以使用
案例和案例处理汇总

SELECT
    FilterID,
    Field1Response = CASE WHEN SUM(CASE WHEN Field1='Yes' THEN 1 ELSE 0 END) > 1 THEN 'Yes' ELSE 'No' END,
    Field2Response = CASE WHEN SUM(CASE WHEN Field2='Yes' THEN 1 ELSE 0 END) > 1 THEN 'Yes' ELSE 'No' END ,
    Field3Response = CASE WHEN SUM(CASE WHEN Field3='Yes' THEN 1 ELSE 0 END) > 1 THEN 'Yes' ELSE 'No' END
    ...
FROM
    Data
GROUP BY
    FilterID
根据数据的性质,您也可以简单地使用
MAX
。这不是一个好习惯,因为值可能会随着时间的推移而变化,但是,如果值始终为Y或N,则可以简单地使用
MAX

SELECT
    FilterID,
    Field1Response = MAX(Field1),
    Field2Response = MAX(Field1),
    Field3Response = MAX(Field1)
    ...
FROM
    Data
GROUP BY
    FilterID

请解释组合值的规则。我不太清楚这里的规则是什么意思,但在任何一行中都有“是”值的列下显示该筛选器ID的“是”很重要。如果筛选器Id对所有行都有“否”值(即对任何特定列都没有“是”值),那么就有一个“否”值,这是max()的好技巧!非常感谢,这就解决了:)