1

样本数据已更新 - 我在确认之前就发布了数据

使用SQL Server,我返回了以下数据:

select id, dateofservice, first, second, third, fourth, fn, ln
from servicesTbl

样本数据:

id  dateofservice   first   second  third   fourth  fn      ln      
-------------------------------------------------------------------
1   2/01/2013       Y       N       N       Y       John    Doe    
2   2/01/2013       N       N       Y       Y       Sue     Fisher    
2   2/01/2013       Y       N       N       N       Sue     Fisher    
3   2/01/2013       Y       N       N       Y       Daivd   Smith    
3   2/01/2013       N       N       Y       N       Daivd   Smith       
4   2/01/2013       N       N       N       N       Bob     Denver    

我需要知道如何编写我的查询,以便 Sue Fisher 和 David Smith 的记录都在一行上,这意味着输出应该如下所示:

1   2/01/2013       Y       N       N       Y       John    Doe    
2   2/01/2013       Y       N       Y       Y       Sue     Fisher    
3   2/01/2013       Y       N       Y       Y       Daivd   Smith       
4   2/01/2013       N       N       N       N       Bob     Denver    

此查询对我不起作用,我不确定如何以我想要的格式获得输出。

select id, dateofservice, first, second, third, fourth, fn, ln    
from servicesTbl    
group by ln

样本数据已更新 - 我在确认之前就发布了数据

4

3 回答 3

1
SELECT 
    id, 
    dateofservice, 
    (CASE WHEN SUM(first) > 0 THEN 1 ELSE 0 END) AS first, 
    (CASE WHEN SUM(second) > 0 THEN 1 ELSE 0 END) AS second, 
    (CASE WHEN SUM(third) > 0 THEN 1 ELSE 0 END) AS third, 
    (CASE WHEN SUM(fourth) > 0 THEN 1 ELSE 0 END) AS fourth, 
    fn, 
    ln 
    OVER (PARTITION BY id)
FROM servicesTbl

考虑一下,这可能也可行,而且更简洁:

SELECT 
    id, 
    dateofservice, 
    MAX(first) AS first, 
    MAX(second) AS second, 
    MAX(third) AS third, 
    MAX(fourth) AS fourth, 
    fn, 
    ln 
    OVER (PARTITION BY id)
FROM servicesTbl

在 MySQL 之类的东西中执行此操作的通常方法是:

SELECT 
    id, 
    dateofservice, 
    MAX(first) AS first, 
    MAX(second) AS second,
    MAX(third) AS third,
    MAX(fourth) AS fourth,
    fn, 
    ln
FROM servicesTbl
GROUP BY id

...但我认为我说 MSSQL 会抱怨 fn, ln 不是聚合函数或不在 GROUP BY 子句中的说法是正确的:使用上面的 OVER PARTITION 方法应该可以解决这个问题。

请注意,这是未经测试的,因为我手头没有 MSSQL,但应该为您指明正确的方向。

于 2013-02-18T19:10:12.307 回答
0

使用 CF,我能够执行分组,然后执行查询

<table>
    <cfoutput query='rsData' group="id">
        <cfoutput>
            <tr>
                <td>#dateformat(dateofservice,'mm/dd/yyyy')#</td>
                <td>#first#</td>
                <td>#second#</td>
                <td>#third#</td>
                <td>#fourth#</td>
                <td>#fn#</td>
                <td>#ln#</td>
            </tr>
        </cfoutput>
    </cfoutput>
</table>
于 2013-02-18T22:24:52.850 回答
0
select id,CONVERT(VARCHAR(10),Dateofservice,111) as Dateofservice,
 MAX(first) as first ,
 MAX(second) as second,
 MAX(third) as third,
 MAX(fourth) as fourth, fn, ln from dbo.ttest
group by id,CONVERT(VARCHAR(10),Dateofservice,111),fn, ln

我已将该表命名为 tttest,您可以使用您的表名。另外,我使用了随机日期格式来更改它以适合自己。

于 2013-02-18T19:50:04.090 回答