Это мой первый пост, поэтому при условии, что форматирование неверно.Заполнение столбца в SQL со значениями из другой таблицы
Я создаю набор данных для круговой диаграммы и для каждой строки, мне нужно добавить цвет (COL_COL) и цветное выделение (COL_HIG) из таблицы цветов, которая выглядит так.
CREATE TABLE [dbo].[T_COL](
[COL_SEQ] [int] IDENTITY(1,1) NOT NULL,
[COL_COL] [nvarchar](20) NULL,
[COL_HIG] [nvarchar](20) NULL,
[COL_NAM] [nvarchar](50) NULL,
[COL_DEL] [bit] NOT NULL,
)
INSERT INTO [dbo].[T_COL] ([COL_COL]
,[COL_HIG]
,[COL_NAM]
,[COL_DEL])
VALUES
('#F7464A', '#FF5A5E','Red', 0),
('#46BFBD', '#5AD3D1','Green', 0),
('#FDB45C', '#FFC870','Yellow', 0),
('#949FB1', '#A8B3C5','Grey', 0),
('#4D5360', '#616774','Dark Grey', 0)
SQL, чтобы генерировать свои данные из таблицы аудита ...
select count(*) as 'Visits',
datename(mm, AUD_DAT) as 'Month',
'Unique Visits by Month' as 'Title',
datepart(mm, AUD_DAT) as 'MonthNo',
ROW_NUMBER() OVER (ORDER BY datename(mm, AUD_DAT)) AS 'rownum',
null as 'colour',
null as 'ColHightlight'
into #temp
from dbo.T_AUD
where AUD_TYP_SEQ = 3 and datepart(year, AUD_DAT) = @year
group by datename(mm, AUD_DAT),datepart(mm, AUD_DAT)
order by datepart(mm, AUD_DAT)
Этот запрос возвращает 8 строк и есть пять цветов в таблице цветов. Я пытаюсь добраться до точки, где строка 1-5 содержит цвет 1-5, тогда строка 6 будет содержать цвет 1, 7 содержит цвет 2 и т. Д. Вместо того, чтобы жестко кодировать количество цветов, я хотел бы использовать подсчет таблицы цветов, поскольку количество будет изменяться, когда цвета будут добавлены в эту таблицу.
Я попытался использовать функцию row_number, но это просто увеличивает число для каждой строки, и я не уверен, могу ли я сбросить его до 1, когда он попадает в подсчет таблицы цветов.
Не могли бы вы помочь мне в этом? Любая помощь оценивается. Ник.
Спасибо за вашу помощь, но я получаю следующую ошибку и не знаю, как ее решить. _ «Имена столбцов в каждой таблице должны быть уникальными. Имя столбца« rn »в таблице« #temp »указано более одного раза.» _ – MrNick
@MrNick. Это потому, что вы вставляете в временную таблицу и есть два столбца ' rn'. Просто измените выбор на различные имена столбцов. Я отредактировал ответ. –
Спасибо, что сработало после нескольких незначительных корректировок. Мне пришлось изменить последние две строки на это из _ctecolors join cteaud ca на ctecolors.rn = ca.rn_ и изменить твердое значение 5 на счет таблицы цветов _ (выберите count (*) из [dbo]. [ T_COL] c, где c.COL_DEL = 0) _. – MrNick