SQL Запрос новых политик, добавленных по месяцам и состоянию за год - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь найти более эффективный способ добавления во временную таблицу. По сути, для каждого штата мне нужно включить все 12 месяцев. У меня сейчас есть очень ручной способ заставить его работать, но должен быть лучший способ загрузить временную таблицу. В основном мне нужно, чтобы значение увеличивалось от 1 до 12, не делая этого вручную. Есть ли уловка в этом?

CREATE TABLE #TempStateCounts(
STATE CHAR(2),
MONTHCOUNT INT,
MONTHVALUE INT
)
INSERT INTO #TempStateCounts
(
    STATE,
    MONTHCOUNT,
    MONTHVALUE
)
SELECT ABBREV, 0, 1 --January
FROM dbo.STATE_LOOKUP
WHERE ABBREV IN ('AR','IA','IL','IN','KS','KY','MN','MO','ND','NE','OH','OK','SD','VA','WI')
INSERT INTO #TempStateCounts
(
    STATE,
    MONTHCOUNT,
    MONTHVALUE 
)
SELECT ABBREV, 0, 2 --February
FROM dbo.STATE_LOOKUP
WHERE ABBREV IN ('AR','IA','IL','IN','KS','KY','MN','MO','ND','NE','OH','OK','SD','VA','WI')
INSERT INTO #TempStateCounts
(
    STATE,
    MONTHCOUNT,
    MONTHVALUE 
)
SELECT ABBREV, 0, 3 --March
FROM dbo.STATE_LOOKUP
WHERE ABBREV IN ('AR','IA','IL','IN','KS','KY','MN','MO','ND','NE','OH','OK','SD','VA','WI')

et c.

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

У вас всего 12, это не исключено. Но в будущем вам может понадобиться таблица чисел:

CREATE TABLE #TempStateCounts(
STATE CHAR(2),
MONTHCOUNT INT,
MONTHVALUE INT
)

declare @m int =1
while (@m<=12)
BEGIN

   INSERT INTO #TempStateCounts
   (
       STATE,
       MONTHCOUNT,
       MONTHVALUE
   )
   SELECT ABBREV, 0, @m
   FROM dbo.STATE_LOOKUP
   WHERE ABBREV IN ('AR','IA','IL','IN','KS','KY','MN','MO','ND','NE','OH','OK','SD','VA','WI')

   set @m=@m+1
END
2 голосов
/ 26 мая 2020

Вы можете сгенерировать числа с помощью рекурсивного CTE, а затем перекрестного соединения:

with cte as (
      select 1 as n
      union all
      select n + 1
      from cte 
      where n < 12
     )
insert into #TempStateCounts (STATE, MONTHCOUNT, MONTHVALUE)
    select abbrev, 0, n
    from dbo.state_lookup sl cross join 
         cte;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...