22,210
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE [dbo].[TEMPTEST](
[T01] [nchar](10) NULL,
[T02] [numeric](18, 0) NULL
) ON [PRIMARY]
INSERT INTO TEMPTEST VALUES ('A',10)
INSERT INTO TEMPTEST VALUES ('A',32)
INSERT INTO TEMPTEST VALUES ('A',41)
INSERT INTO TEMPTEST VALUES ('A',10)
INSERT INTO TEMPTEST VALUES ('A',14)
INSERT INTO TEMPTEST VALUES ('A',27)
SELECT * FROM TEMPTEST
想得出这样的结果
条件:SUM(T02)=11 的数据
即:数据表中的T02列求和=某一个数值
怎么写SQL,想到Having ..
//---------------
T01 T02
A 1
A 10
CREATE TABLE [dbo].[TEMPTEST](
ID int IDENTITY (1,1) not null,
[T01] [nchar](10) NULL,
[T02] [numeric](18, 0) NULL
) ON [PRIMARY]
INSERT INTO TEMPTEST VALUES ('A',10)
INSERT INTO TEMPTEST VALUES ('A',32)
INSERT INTO TEMPTEST VALUES ('A',41)
INSERT INTO TEMPTEST VALUES ('A',10)
INSERT INTO TEMPTEST VALUES ('A',14)
INSERT INTO TEMPTEST VALUES ('A',27)
DECLARE @total int=11
select prev_t.*,t.*,case when isnull(prev_t.LastTotal,0)+t.T02<=@total then t.T02 else @total-isnull(prev_t.LastTotal,0) end
from TEMPTEST t
OUTER APPLY (select sum(tt.T02) as LastTotal from TEMPTEST as tt where tt.ID<t.id) prev_t
where isnull(prev_t.LastTotal,0)<@total
DECLARE @total int=11
select t.T01,case when isnull(prev_t.LastTotal,0)+t.T02<=@total then t.T02 else @total-isnull(prev_t.LastTotal,0) end as T02
from TEMPTEST t
OUTER APPLY (select sum(tt.T02) as LastTotal from TEMPTEST as tt where tt.ID<t.id and tt.T01=t.T01) prev_t
where isnull(prev_t.LastTotal,0)<@total
11时:
A 10
A 1
111时:
A 10
A 32
A 41
A 10
A 14
A 4
T01 T02
A 1
A 10
那么我这么理解是你想要的么?
CREATE TABLE [dbo].[TEMPTEST](
[T01] [nchar](10) NULL,
[T02] [numeric](18, 0) NULL
) ON [PRIMARY]
INSERT INTO TEMPTEST VALUES ('A',1)
INSERT INTO TEMPTEST VALUES ('A',10)
INSERT INTO TEMPTEST VALUES ('B',41)
INSERT INTO TEMPTEST VALUES ('B',10)
INSERT INTO TEMPTEST VALUES ('B',14)
INSERT INTO TEMPTEST VALUES ('C',27)
SELECT * FROM (SELECT *,SUM(T02)over(partition by T01) s FROM TEMPTEST)T WHERE s=11
SELECT T01,SUM(T02) FROM TEMPTEST GROUP BY T01 HAVING SUM(T02) = 11