簡體   English   中英

將值與SQl中的表進行比較

[英]Compare values with in a table in SQl

這是MyTable結構

MyTable : ID, Date 

Select ID, Date from MyTable

ID     Date

50    2013-01-01 00:00:00.000 
51    2013-01-02 00:00:00.000 
52    2013-01-02 00:00:00.000 

我需要得到這樣的結果。

ID     Date

50    2013-01-01 00:00:00.000
50    2013-01-02 00:00:00.000
50    2013-01-03 00:00:00.000 

51    2013-01-02 00:00:00.000 
51    2013-01-03 00:00:00.000

52    2013-01-03 00:00:00.000 

我如何得到結果?

好像您要獲取日期列表。 這樣,您就可以使用遞歸CTE來獲取日期列表:

;with data(id, date) as
(
  select id, date
  from mytable
  union all
  select id, dateadd(day, 1, date)
  from data
  where dateadd(day, 1, date) <= '1/3/2013'
)
select *
from data
order by id

請參閱帶有演示的SQL Fiddle 這將為表格中當前日期和您提供的結束日期之間的每個ID生成日期列表。 在我的示例中是1/3/2013

我認為只有在ID列上有CLUSTERED INDEX的情況下,此方法才能更快地工作,否則bluefeet的解決方案非常棒!

SELECT T1.ID
        ,Date = DATEADD(DAY, -ROW_NUMBER() OVER (PARTITION BY T1.ID ORDER BY (SELECT NULL))+1, '2013-01-03')
FROM MyTable T1
JOIN MyTable T2 ON T1.ID <= T2.ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM