Как создать столбец в таблице, который принимает значения из другой таблицы при выполнении условия, но назначает другое значение в случае сбоя условия - PullRequest
0 голосов
/ 29 июня 2019

У меня есть таблица, например: Таблица 1, в которой есть столбец с датами, а другой столбец с некоторым числовым значением, связанным с этой датой.Он имеет случайные даты между 1 января 2018 года по 31 декабря 2018 года.Я пытаюсь создать другую таблицу с аналогичной структурой (2 поля даты и числовое значение), но дата должна содержать записи для всех дней 2018 года, а во 2-м столбце должно быть '-1' для дат, которых не былов 1-й таблице и числовое значение из 1-й таблицы, если даты совпадают.

---- Это дает мне даты во второй таблице ---

;WITH CTE AS




(
  SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) - 1 AS [Incrementor]
  FROM   [master].[sys].[columns] sc1
  CROSS JOIN [master].[sys].[columns] sc2
)




SELECT DATEADD(DAY, cte.[Incrementor], '2018-01-01') as [date]
into [Table 2]

FROM CTE 

WHERE DATEADD(DAY, cte.[Incrementor], '2018-01-01') < '2018-12-31'

Тогда яиспользовала оператор case для создания столбца 2 в таблице 2, но не удалось.

select [Table 2].[date],
case
when ([Table 2].[date] = [table 1].[date] 

then [Table1].[numericvalue] else '-1')

end as [NewNumericValue]

from 
[Table1] 

inner join

[table2]

on [table 1].[date] = [table 2].[date]

Столбец 2 таблицы 2 содержит все даты в 2018.

1 Ответ

0 голосов
/ 30 июня 2019
;WITH CTE AS

(
  SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) - 1 AS [Incrementor]
  FROM   [master].[sys].[columns] sc1
  CROSS JOIN [master].[sys].[columns] sc2
)

select [date],isnull([Numericvalue],-1) from 
(SELECT DATEADD(DAY, cte.[Incrementor], '2018-01-01') as [date]
FROM CTE 
WHERE DATEADD(DAY, cte.[Incrementor], '2018-01-01')<'2018-12-31') as Table2    
left join
[Table1]
on [Table2].[date] = [Table1].[date]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...