Sql 如何为每行输出7条记录,每周每天输出1条记录?

Sql 如何为每行输出7条记录,每周每天输出1条记录?,sql,sql-server-2008,Sql,Sql Server 2008,试图在这里保存大量的数据输入。我目前的输出如下: CONTID DESCR 001 Area 1 001 Area 2 001 Area 3 我想做的是为每个“DESCR”(区域)输出7条记录,为一周中的每一天输出1条记录(相应地为0-6条) 示例输出为: CONTID DESCR DAYOFWEEK 001 Area 1 0 001 Area 1 1 001 Area 1 2 001

试图在这里保存大量的数据输入。我目前的输出如下:

CONTID  DESCR
001     Area 1
001     Area 2
001     Area 3
我想做的是为每个“DESCR”(区域)输出7条记录,为一周中的每一天输出1条记录(相应地为0-6条)

示例输出为:

CONTID  DESCR         DAYOFWEEK
001     Area 1        0
001     Area 1        1
001     Area 1        2
001     Area 1        3
001     Area 1        4
001     Area 1        5
001     Area 1        6
001     Area 2        0
001     Area 2        1
001     Area 2        2
001     Area 2        3
001     Area 2        4
001     Area 2        5
001     Area 2        6
001     Area 3        etc...

如果可能的话,我希望使用直接SQL来实现这一点。这是一个一次性的“复制/粘贴”作业,用于填充新表。

您可以使用交叉联接来完成此操作

(谢谢@TT.指出,我的回答可以缩短)


此外,考虑另一个解决方案,该方案也使用交叉连接,但隐式地使用派生表,以在特定RDMS中需要通用SQL解决方案的任何未来读者:

SELECT CONTID,  DESCR, DAYOFWEEK
FROM 
  (SELECT CONTID,  DESCR FROM dataTable) AS T1,
  (SELECT 0 As DAYOFWEEK
    UNION  SELECT 1
    UNION  SELECT 2
    UNION  SELECT 3
    UNION  SELECT 4
    UNION  SELECT 5
    UNION  SELECT 6) As WeekDays

哦,快!太棒了!我知道必须有一种方法来“硬编码”一组这样的值。我不知道关于VALUES()的事情。很酷!工作完美!威尔-等着让我:)-不停地对我大喊大叫,叫我再等8分钟。现在再做一次割礼:
。。。交叉连接(值(0),(1),(2),(3),(4),(5),(6))作为所有天(DayInx)
@TT Oh sh。。。他又干了!是的,没错。。。我以前在CTE中有过这一点,但我认为最好读作子选择。但是,你的解决方案更干净。如果你不介意的话,我会编辑我的答案…@SourceMatters,根据TT的评论,我把我的答案缩短了一点,对你来说可能会很有趣…是的,对,我会投票赞成,但是(有点挑剔…):如果你知道,你的值是唯一的,最好使用
UNION ALL
。。。
SELECT CONTID,  DESCR, DAYOFWEEK
FROM 
  (SELECT CONTID,  DESCR FROM dataTable) AS T1,
  (SELECT 0 As DAYOFWEEK
    UNION  SELECT 1
    UNION  SELECT 2
    UNION  SELECT 3
    UNION  SELECT 4
    UNION  SELECT 5
    UNION  SELECT 6) As WeekDays