C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: SQLのグループ化について


(過去ログ 86 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■51508 / inTopicNo.1)  SQLのグループ化について
  
□投稿者/ 晃 (1回)-(2010/07/08(Thu) 00:58:51)

分類:[データベース全般] 

SQL Sever 2008で開発しています。
下記のように、名前が同一で他の列の内容が違う行(1列以外NULL)を1つに纏めたいのですが、
なにか良い方法はあるでしょうか?
NULLかそうでないかならば、COUNT関数とGROUP BY句でなんとかなるのですが、
行の内容は後でプログラム(C#)で必要なので、私が知っている集計関数だとうまく
グループ化できないでいます。

名前 1月 2月 3月 〜 12月
田中 ○  NULL NULL 〜 NULL
田中 NULL ×  NULL 〜 NULL
田中 NULL NULL □  〜 NULL
田中 NULL NULL NULL 〜 ☆
      ↓
田中 ○  ×  □ 〜  ☆

どなたかご助力お願いします。
引用返信 編集キー/
■51512 / inTopicNo.2)  Re[1]: SQLのグループ化について
□投稿者/ 勝田 (1回)-(2010/07/08(Thu) 09:30:31)
どうしても1回のクエリでやる必要があり、パフォーマンスを気にしないならこんな感じでしょうか。

SELECT
    T1.名前
,   (SELECT TOP 1 T2.[1月] FROM テーブル T2 WHERE T2.名前 = T1.名前 AND T2.[1月] IS NOT NULL) AS [1月]
,   (SELECT TOP 1 T2.[2月] FROM テーブル T2 WHERE T2.名前 = T1.名前 AND T2.[2月] IS NOT NULL) AS [2月]
 ・
 ・
 ・
,   (SELECT TOP 1 T2.[12月] FROM テーブル T2 WHERE T2.名前 = T1.名前 AND T2.[12月] IS NOT NULL) AS [12月]
FROM
    テーブル T1
GROUP BY
    T1.名前

引用返信 編集キー/
■51528 / inTopicNo.3)  Re[1]: SQLのグループ化について
□投稿者/ 魔界の仮面弁士 (1695回)-(2010/07/08(Thu) 11:54:22)
No51508 (晃 さん) に返信
> SQL Sever 2008で開発しています。
> 名前 1月 2月 3月 〜 12月
> 田中 ○  ×  □ 〜  ☆

MAX あるいは MIN では駄目でしょうか?

---

SELECT [名前],
  MAX( [1月])  [1月],
  MAX( [2月])  [2月],
  MAX( [3月])  [3月],
  MAX([12月]) [12月]
FROM [例表]
GROUP BY [名前]

----

CREATE TABLE [例表] (
  [名前] NVARCHAR(10) NOT NULL,
  [1月]  NVARCHAR(1) NULL,
  [2月]  NVARCHAR(1) NULL,
  [3月]  NVARCHAR(1) NULL,
  [12月] NVARCHAR(1) NULL
)

INSERT INTO [例表]
  ( [名前], [1月], [2月], [3月], [12月] )
 VALUES
  ( '田中',  '○',  NULL,  NULL,  NULL),
  ( '田中',  NULL,  '×',  NULL,  NULL),
  ( '田中',  NULL,  NULL,  '□',  NULL),
  ( '田中',  NULL,  NULL,  NULL,  '☆')

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -