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 行に収まるようにクエリを記述する方法を知る必要があります。つまり、出力は次のようになります。

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 に答える