У меня есть следующий код SQL, который создает очень полезную сводную таблицу:SQL сводной таблица Dynamic - исключить неиспользуемые столбцы
Use [A1_20132014]
DECLARE @cols NVARCHAR (MAX)
SELECT @cols = COALESCE (@cols + ',[' + Link_ID + ']', '[' + Link_ID + ']')
FROM (SELECT DISTINCT Link_ID FROM A1) PV
ORDER BY Link_ID
DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT * FROM
(
-- We will select the data that has to be shown for pivoting
SELECT date_1, StartHour,Cost, Link_ID
FROM A1
WHERE Section = (''1AB'')
) x
PIVOT
(
-- Values in each dynamic column
SUM(Cost)
-- Select columns from @cols
FOR Link_ID IN (' + @cols + ')
) p;'
EXEC SP_EXECUTESQL @query
из этих рубрик
link_id Section date_1 StartHour Cost data_source
4000000027866016A 8NB 2013-09-02 6 5871 1
4000000027866017B 5EB 2013-10-09 9 8965 2
4000000027856512B 4TB 2013-05-06 15 6754 1
4000000027866015A 6HB 2013-06-08 8 5354 1
4000000027866011A 1AB 2013-06-09 11 2 1
с этими типами источников;
link_Id nvarchar(50)
Section nvarchar(50)
Date_1 smalldatetime
StartHour int
Cost float
data_source int
Однако, несмотря ИНЕК, что указует определенный раздел, к сожалению, все секции еще появляются в сводной таблице, но заполняются NULL значение всего пути вниз.
Есть ли способ полностью исключить столбцы, которые не соответствуют предложению WHERE?
Спасибо за любую помощь.
Henry.
Я думаю, вы должны использовать предложение where в первом запросе, где вы устанавливаете @cols. – KumarHarsh
вы также можете проверить эту ссылку. http://stackoverflow.com/questions/28961753/how-can-i-get-all-items-to-display-as-columns-using-sql-pivot-when-number-of-ite/28962244#28962244 – KumarHarsh
Я не могу заставить это работать, он говорит мне, что раздел является недопустимым именем столбца в части @cols. – hc91