SQLに戻り、合計したい列を作成する必要があるかもしれません。あなたの例を使用して
:
select
GID,
UID,
Cost,
case when row_number() over(partition by GID,UID ORDER BY GID,UID,Cost) = 1 then Cost else 0 end as firstCostGroup
from
(
select 'a' as GID, 1 as UID, 100 as Cost
union
select 'a', 1, 101
union
select 'a', 2, 200
union
select 'a', 2, 201
union
select 'b', 3, 300
union
select 'b', 3, 301
) as rawdata
ROW_NUMBER関数は、SQL 2005以降が必要です。
SQL 2000のための回避策は
drop table #RawData
go
drop table #RawDataFirstRows
GO
create table #RawData
(
id int identity(1,1),
GID varchar(10),
UID int,
Cost int
)
insert into #RawData
select 'a' as GID, 1 as UID, 100 as Cost
union
select 'a', 1, 101
union
select 'a', 2, 200
union
select 'a', 2, 201
union
select 'b', 3, 300
union
select 'b', 3, 301
create table #RawDataFirstRows
(
id int
)
insert into #RawDataFirstRows
select
rd.id
from #RawData rd
where
rd.id = (select top 1 id from #RawData rw where rd.uid = rw.uid and rd.gid = rw.gid order by rw.gid,rw.uid)
select
rd.GID, rd.UID, rd.Cost, case when rw.id is null then 0 else 1 end as firstCostGroup
from
#RawData rd
left join
#RawDataFirstRows rw on rd.id = rw.id
注ようなものになるだろうという句は、それが#Rawdataテーブルの行ごとに、そのクエリを呼び出すために持っていると信じられないほどinffecientあるでネストされたクエリ。仕事は終わったのですが、どんな費用がかかるのですか?
実稼働レベルのデータでパフォーマンスの問題が発生しない場合は、問題ありません。
@マーク、私は、Stackoverflowには本当に、私は答えを評価しようとしましたが、システムは私にそうすることができません...>< –
@マーク、私の "マーク/投票"状況についてのStackoverflow.com、そして今私は "答えを受け入れる"ことができます。どうもありがとう。 –