Saya perlu menemukan cara untuk SUM()
semua nilai positif untuk num
dan mengembalikan SUM()
semua angka positif dan satu baris individual untuk setiap angka negatif. Di bawah ini adalah contoh DDL:
Create Table #Be
(
id int
, salesid int
, num decimal(16,4)
)
Insert Into #BE Values
(1, 1, 12.32), (2, 1, -13.00), (3, 1, 14.00)
, (4, 2, 12.12), (5, 2, 14.00), (6, 2, 21.23)
, (7, 3, -12.32), (8,3, -43.23), (9, 3, -2.32)
Dan ini adalah output yang saya inginkan (angka positif untuk setiap salesid SUM()
dan negatif mendapatkan garis individual kembali):
salesid num
1 26.32
1 -13.00
2 47.35
3 -12.32
3 -43.23
3 -2.32
sql-server
sql-server-2008
t-sql
pengguna2676140
sumber
sumber
UNION ALL
juga, tidakUNION
.Ini juga berfungsi:
Asumsi:
THEN 0
.salesid ELSE salesid+id+1
akan bekerja juga>= 0
( Apakah nol positif atau negatif? ). Meskipunx+0=x
tampaknya membuat=
tanda itu tidak perlu, ada baiknya diingat bahwa kasus ini belum dilupakan dan bagaimana 0 ditangani (sebagai SUM atau sebagai baris individual). Jikathe SUM() of all positive numbers
berartiSUM of strictly positive numbers
(yaitu> 0), maka=
tidak diperlukan.Ini harus diuji dengan data dan indeks nyata, tetapi dengan hanya 1 tabel scan, kinerja mungkin sedikit lebih baik dalam beberapa kasus.
Tidak adanya indeks tampaknya memiliki dampak yang lebih kecil dengan kueri ini pada data uji di bawah:
sumber
GROUP BY salesid, iif(num >= 0, 0, id)
Cool query.