0

結合する必要がある2つのテーブルがあり、列が水平に配置された3番目のテーブルを作成します。表は次のとおりです。 ここに画像の説明を入力

table1とからの出力 2 が必要table2です。

私はいくつかの調査を行い、使用する必要があることがわかりましたPIVOT。私もいくつかのクエリを書きました。私のクエリは

SELECT  * FROM (
  SELECT 
  CONVERT(CHAR(4), table_2.Date, 100) + CONVERT(CHAR(4), table_2.Date, 120) as    RegistrationDate,  
  table_1.PDESC as ProductDescription from table_2 
  left outer join table_1 on table_1.PID = table_2.PID
) 
tableT
PIVOT (count(ProductDescription) FOR RegistrationDate
IN ([Jan 2009],[Feb 2009],[Mar 2009],[Apr 2009],[May 2009],[Jun 2009])) AS pvt

しかし、このクエリは機能していません! テーブルを作成するための SQL スクリプトも添付しました。

スクリプトをこちらにアップロードしました。

4

1 に答える 1

2

問題は、両方countを表示しようとしていることですProductDescription。を表示したい場合ProductDescriptionは、いくつかの方法があります。

を に適用する代わりにcount、次の列を適用ProductDescriptionできます。countPID

SELECT  * 
FROM 
(
  SELECT CONVERT(CHAR(4), t2.Date, 100) + CONVERT(CHAR(4), t2.Date, 120) as RegistrationDate,  
    t1.ProductDesc as ProductDescription,
    t1.PID
  from table_2 t2
  left outer join table_1 t1
    on t1.PID = t2.PID
) tableT
PIVOT 
(
  count(PID) FOR RegistrationDate
  IN ([Jan 2009],[Feb 2009],[Mar 2009],[Apr 2009],[May 2009],[Jun 2009])
) AS pvt;

SQL Fiddle with Demoを参照してください。

または、サブクエリに 2 番目の列を作成して、2 回を返すこともできますProductDescription。1 つの列はカウントに使用され、2 番目の列は最終的な表示に使用されます。

SELECT  * 
FROM 
(
  SELECT CONVERT(CHAR(4), t2.Date, 100) + CONVERT(CHAR(4), t2.Date, 120) as RegistrationDate,  
    t1.ProductDesc as ProductDescription,
    t1.ProductDesc as Product
  from table_2 t2
  left outer join table_1 t1
    on t1.PID = t2.PID
) tableT
PIVOT 
(
  count(ProductDescription) FOR RegistrationDate
  IN ([Jan 2009],[Feb 2009],[Mar 2009],[Apr 2009],[May 2009],[Jun 2009])
) AS pvt;

デモで SQL Fiddle を参照してください

于 2013-05-02T11:51:37.510 に答える