1

顧客の詳細を格納する一時テーブルを作成しました。CustomerNoでグループ化されたデータをクエリし、IsDefaultが1に設定されている場合はImagePathを表示します。

CREATE TABLE #Temp
(ID varchar(100), CustomerNo varchar(10), IsDefault int, ImagePath varchar(100), ViewCount int)

INSERT INTO #Temp
SELECT '1', 'AC1234', 1, 'xxx1.jpg', 12 UNION ALL
SELECT '2', 'AC1234', 0, 'xxx2.jpg', 42 UNION ALL
SELECT '3', 'AC1234', 0, 'xxx3.jpg', 15 UNION ALL
SELECT '4', 'AC1235', 0, 'xxx4.jpg', 16 UNION ALL
SELECT '5', 'AC1236', 1, 'xxx5.jpg', 13 UNION ALL
SELECT '6', 'AC1234', 0, 'xxx6.jpg', 56 UNION ALL
SELECT '7', 'AC1235', 1, 'xxx7.jpg', 17

SELECT * FROM #Temp
SELECT CustomerNo, MAX(IsDefault) as IsDefault, Sum(ViewCount) as ViewCount FROM #Temp
GROUP BY CustomerNo

DROP TABLE #Temp

結果:

CustomerNo IsDefault   ViewCount
---------- ----------- -----------
AC1234     1           125
AC1235     1           33
AC1236     1           13

このような結果を得ることができますか( "IsDefault" = 1の場合にImagePathを表示します)?

CustomerNo IsDefault   ViewCount   ImagePath
---------- ----------- ----------- -----------
AC1234     1           125         xxx1.jpg
AC1235     1           33          xxx4.jpg
AC1236     1           13          xxx5.jpg

どうもありがとう!!

4

1 に答える 1

0

IsDefault フラグが 1 に設定されているレコードが 1 つだけであると仮定すると、次のようになります。

CREATE TABLE #Temp (
    ID varchar(100)
  , CustomerNo varchar(10)
  , IsDefault int
  , ImagePath varchar(100)
  , ViewCount int
);

INSERT INTO #Temp
SELECT '1', 'AC1234', 1, 'xxx1.jpg', 12 UNION ALL
SELECT '2', 'AC1234', 0, 'xxx2.jpg', 42 UNION ALL
SELECT '3', 'AC1234', 0, 'xxx3.jpg', 15 UNION ALL
SELECT '4', 'AC1235', 0, 'xxx4.jpg', 16 UNION ALL
SELECT '5', 'AC1236', 1, 'xxx5.jpg', 13 UNION ALL
SELECT '6', 'AC1234', 0, 'xxx6.jpg', 56 UNION ALL
SELECT '7', 'AC1235', 1, 'xxx7.jpg', 17
;

with CustomerReport (CustomerNo, ViewCount) as 
     (SELECT t.CustomerNo, Sum(t.ViewCount) ViewCount 
        FROM #Temp t
       GROUP BY t.CustomerNo)
Select q1.CustomerNo, q1.ViewCount 
       , (Select ImagePath
            from #Temp
           where #Temp.CustomerNo = q1.CustomerNo
             and #Temp.IsDefault = 1) ImgPath
  from CustomerReport q1
;

drop table #temp
;

私の知る限り、CTE 構文のサポートを得るには MS-SQL 2008+ が必要です。

于 2012-11-21T04:23:10.777 に答える