10行記錄
id 數量
001 5
002 8
003 20
004 35
005 41
006 2
007 15
008 10
009 9
如何取出 10 行記得中的任意行,數量合計 為 50 ?方法不限。
uj5u.com熱心網友回復:
可以把數量先排序,然后 1-25 為一組A, 26-49 為一組B,數量 50的肯定直接取走了。B組的資料由于都大于25,所以不存在兩個數字相加的問題。
于是就A組的數字做回圈,去嘗試和B組的數字相加看是否50,等于50的就取走相應記錄。
存在A組的兩個數字相加后,再去和B組數字相加等于50的情況。
A + B = 50 ?
A + A + B = 50 ?
...
uj5u.com熱心網友回復:
這個我也想知道,每次去藥店,社保扣減金額都是系統自動用其他藥品湊金額uj5u.com熱心網友回復:
if OBJECT_ID('tempdb..#A') is not null
begin
drop table #A
end
select v,ROW_NUMBER()over(order by v) id into #A from(
select 1 id,5 v union all
select 2 ,8 union all
select 3 ,20 union all
select 4 ,35 union all
select 5 ,41 union all
select 6 ,2 union all
select 7 ,15 union all
select 8 ,10 union all
select 9 ,9
)t;
--六個數字組合
with cte as(
select t1.id t1_id,t1.v t1_v,
t2.id t2_id,t2.v t2_v,
t3.id t3_id,t3.v t3_v,
t4.id t4_id,t4.v t4_v,
t5.id t5_id,t5.v t5_v,
t6.id t6_id,t6.v t6_v,
ROW_NUMBER()over(order by t1.id) Ord
from #A t1
left join #A t2 on t1.id<t2.id
left join #A t3 on t2.id<t3.id
left join #A t4 on t3.id<t4.id
left join #A t5 on t4.id<t5.id
left join #A t6 on t5.id<t6.id
),c as(
select *,
SUM(isnull(cte.t1_v,0) + isnull(cte.t2_v,0)) over(partition by Ord) Sum_2,
SUM(isnull(cte.t1_v,0) + isnull(cte.t2_v,0) + isnull(cte.t3_v,0)) over(partition by Ord) Sum_3,
SUM(isnull(cte.t1_v,0) + isnull(cte.t2_v,0) + isnull(cte.t3_v,0) + isnull(cte.t4_v,0)) over(partition by Ord) Sum_4,
SUM(isnull(cte.t1_v,0) + isnull(cte.t2_v,0) + isnull(cte.t3_v,0) + isnull(cte.t4_v,0) + isnull(cte.t5_v,0)) over(partition by Ord) Sum_5,
SUM(isnull(cte.t1_v,0) + isnull(cte.t2_v,0) + isnull(cte.t3_v,0) + isnull(cte.t4_v,0) + isnull(cte.t5_v,0) + isnull(cte.t6_v,0)) over(partition by Ord) Sum_6
from cte
)
select distinct c.t1_v,
case when c.Sum_2<=50 then c.t2_v else 0 end t2_v,
case when c.Sum_3<=50 then c.t3_v else 0 end t3_v,
case when c.Sum_4<=50 then c.t4_v else 0 end t4_v,
case when c.Sum_5<=50 then c.t5_v else 0 end t5_v,
case when c.Sum_6<=50 then c.t6_v else 0 end t6_v
from c
where c.Sum_2=50 or c.Sum_3=50 or c.Sum_4=50 or c.Sum_5=50 or c.Sum_6=50

才疏學淺,隨便寫寫,占個位置 等大神的答案、
uj5u.com熱心網友回復:
不建議在sql中來實作回朔演算法,可以看看回朔演算法實作的原理轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/236302.html
標籤:基礎類
