1

私はSQLに非常に慣れていないので、明らかなことが抜けている場合は事前に謝罪してください。

私のデータは、顧客契約番号、サービス日、および価格リストで構成されています。顧客ごとにグループ化し、サービス日ごとに最初の価格を取得し、別の列にすべての価格の合計を表示できるようにする必要があります。

だから私は次のようなものを持っています:

SELECT
CONTRACT, 
SUM(PRICES) as [TOTAL SPENT]
FIRST(PRICE) as [FIRST PRICE]
FROM TABLE
GROUP BY CONTRACT
ORDER BY CONTRACT

しかし、どうやら First は組み込み関数名ではありません (私は Microsoft SQL Server を使用しています)。助言がありますか?

前もって感謝します!

4

3 に答える 3

2

使用できますROW_NUMBER

WITH CTE AS(
    SELECT CONTRACT, 
           SUM(PRICES) OVER(PARTITION BY CONTRACT) as [TOTAL SPENT],
           PRICE as [FIRST PRICE],
           ROW_NUMBER()OVER(PARTITION BY Contract Order By  ServiceDate) 
    FROM TABLE
)
SELECT CONTRACT, [TOTAL SPENT], [FIRST PRICE]
FROM CTE
WHERE RN = 1
ORDER BY CONTRACT

これにより、 に従って各契約グループから最初の行が選択されますServiceDate。このアプローチには、集計関数を使用したり、.xml ファイルに含める必要なく、すべての列を選択できるという利点がありますGROUP BY。少なくとも SQLServer 2005 が必要であることに注意してください。

于 2013-07-30T15:36:45.497 に答える