2012-10-04 92 views
-1

我有以下結果集:從記錄的T-SQL計算門檻

ContentSendId ContentId NewsletterId Position IsConditionMatch SendDate    NumberOfSends IsSendValid 
    ------------- ----------- ------------ ----------- ---------------- ----------------------- ------------- ----------- 
    1    100001  51   1   0    2011-05-14 00:00:00.000 200   0 
    2    100001  51   1   0    2011-05-13 00:00:00.000 300   0 
    3    100001  51   1   0    2011-05-14 00:00:00.000 100   0 
    4    100001  51   1   0    2011-05-13 00:00:00.000 200   0 

我需要運行在T-SQL中的計算,其中,如果給定的閾值的記錄應該得到插入(到一個臨時表)和閾值之外的任何值應該因此,在這個例子中可以忽略

可以說閾值是500,第一個記錄和第二個記錄應該得到插入。

編輯: 在這種情況下運行總數是需要注意的,例如(上面的示例更新)在上述情況下,臨時表應該插入第一個和第二個記錄並停止,因爲已達到閾值500 。

+2

你能分享沒有用的sql語句嗎? – rene

+0

SQL Server 2005,2008或2012?它可能會影響解決方案的制定方式。適用於SQL 2008的答案可能不適用於SQL 2012,因爲新版本對於某些內容具有一流的構造,例如,運行總計,而與舊版本中,你必須拿出創造性與最佳的解決方案 –

+0

SQL Server 2008中 –

回答

1
select t1.ContentSendId, t1.ContentId, t1.NewsletterId, t1.Position, t1.IsConditionMatch, t1.SendDate, t1.NumberOfSends, t1.IsSendValid 
into #t 
from yourtable t1 
    inner join yourtable t2 on t1.ContentSendId>=t2.ContentSendId 
group by t1.ContentSendId, t1.ContentId, t1.NewsletterId, t1.Position, t1.IsConditionMatch, t1.SendDate, t1.NumberOfSends, t1.IsSendValid 
having SUM(t2.NumberOfSends) < @threshold 
+0

更新後的問題更多的細節。 –

+1

與多個SQL :) – podiluska

0

看來你只是想過濾結果集。

SELECT * FROM t1 
GROUP BY SendDate 
HAVING SUM(NumberOfSends) >= 500 
+0

對不起增加了更多的解釋,並提高我的例子結果集更新的答案,運行總計是重要的考慮因素。 –