0

以下のテーブル構造を取得しました。

表1

ServiceID Activity_type       Start_date  End_date
1         Long Day Care       12/03/2012  12/03/2020
1         Family Day Care     12/03/2012  12/03/2020
2         Vacation Care       12/05/2012  12/03/2020
2         Before School Care  12/05/2012  12/03/2020
3         Long Day Care       12/09/2012  12/03/2020
3         Vacation Care       12/09/2012  12/03/2020
3         After School Care   12/09/2012  12/03/2020

Activity_typeサービスにアクティビティがない場合は空白を表示したいのですが、サービスにそのアクティビティがない場合は、空白Activity_typeでレコードを表示します。各サービスの合計行 = 個別のアクティビティ タイプの合計数が必要です。ServiceId , Start_date, End_DateActivity_type

出力は次のようになります。ここでは、個別のアクティビティ タイプの合計数が 5 であるため、サービスごとに 5 つの行があります。

ServiceID Activity_type       Start_date  End_date
1         Long Day Care       12/03/2012  12/03/2020
1         Family Day Care     12/03/2012  12/03/2020
1                             12/03/2012  12/03/2020
1                             12/03/2012  12/03/2020
1                             12/03/2012  12/03/2020
2         Vacation Care       12/05/2012  12/03/2020
2         Before School Care  12/05/2012  12/03/2020
2                             12/05/2012  12/03/2020
2                             12/05/2012  12/03/2020
2                             12/05/2012  12/03/2020
3         Long Day Care       12/09/2012  12/03/2020
3         Vacation Care       12/09/2012  12/03/2020
3         After School Care   12/09/2012  12/03/2020
3                             12/09/2012  12/03/2020
3                             12/09/2012  12/03/2020

助けて?

4

2 に答える 2

1

もっと効率的な方法で作成できると確信していますが、最も簡単な方法は、ServiceIDとの間のデカルト積を作成Activity_Typeしてすべての組み合わせを取得し、次にLEFT JOINデータ テーブルに実際に存在する値を取得することです。

TSQL では、次のようになります。

SELECT s.ServiceID, ISNULL(t.Activity_Type,'') Activity_Type, 
       s.Start_date, s.End_date
FROM (SELECT DISTINCT ServiceID,Start_date, End_date FROM Table1) s
JOIN (SELECT DISTINCT Activity_Type FROM Table1) a
  ON 1=1
LEFT JOIN Table1 t
  ON s.ServiceID = t.ServiceID
 AND a.Activity_Type = t.Activity_Type
ORDER BY ServiceID, Activity_Type DESC

実際に RDBMS に依存する唯一の部分はISNULL、たとえば MySQL では と呼ばれる部分IFNULLです。

でテストする SQLfiddle

于 2013-05-08T04:24:17.527 に答える
0

Activity_type 列がnull値を許可するように定義されている場合は、実行時にその値をスキップできますINSERT。たとえば、MySQL では次のようになります。

INSERT INTO table1 (ServiceID, Start_date, End_date) values (1, '2012-12-03', '2020-12-03');

他のデータベースでは、日付を指定するためのデフォルト形式が若干異なる場合がありますが、考え方は同じです。

于 2013-05-08T04:35:01.917 に答える