Я могу фильтровать столбцы, но не строки.Есть ли способ фильтровать строки в динамической хранимой процедуре?
Вот мои данные iGuide Таблица Я использую с моим PIVOT:
/////////////////////////////////////////////////////
Zone Enabled Channel DMA Region HQ Machine
ACC 1 AEN Norfolk Other virginia dzsfk
ACC 1 CNN Norfolk Other virginia dzsfk
ACC 1 ESPN Norfolk Other virginia dzsfk
ACC 1 HIST Norfolk Other virginia dzsfk
ACC 1 FOOD Norfolk Other virginia dzsfk
ANJ 1 AEN Paducah Pacific hqs3ftbgwi adanj
ANJ 1 ESPN Paducah Pacific hqs3ftbgwi adanj
ANJ 1 HIST Paducah Pacific hqs3ftbgwi adanj
ANJ 1 CNN Paducah Pacific hqs3ftbgwi adanj
CHD 1 ESPN Denver Pacific hqs3ftbgwi adchd
CHD 1 FOOD Denver Pacific hqs3ftbgwi adchd
CHD 1 DISC Denver Pacific hqs3ftbgwi adchd
CHI 1 AEN Denver Pacific hqs3ftbgwi adchd
CHI 1 FOOD Chico Pacific hqs4ftbgwi adv1chicca
CHI 1 ESPN Chico Pacific hqs4ftbgwi adv1chicca
CHI 1 CNN Chico Pacific hqs4ftbgwi adv1chicca
/////////////////////////////////////////////////////
Here is an example of my initial result of Stored Procedure without any filters:
CHANNEL | ACC | ANJ | CHD | CHI |
AEN 1 1 NULL 1
CNN 1 1 NULL 1
ESPN 1 1 1 1
FOOD 1 NULL 1 1
HIST 1 1 NULL NULL
DISC NULL NULL 1 NULL
_________________________________________________
Вот мой текущий результат я получаю после применения зоны @Filter = 'АСС':
_________________________________________________
CHANNEL | ACC |
AEN 1
CNN 1
ESPN 1
FOOD 1
HIST 1
DISC NULL
_________________________________________________
Мой желаемый результат - это:
_________________________________________________
CHANNEL | ACC |
AEN 1
CNN 1
ESPN 1
FOOD 1
HIST 1
_________________________________________________
Как избавиться от пустых строк NULL при применении фильтра?
Вот мой код:
USE [Media_Ops]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[Usp_GetWHERE]
@Filter Varchar(MAX)
AS
DECLARE @columns NVARCHAR(MAX)
,@sql NVARCHAR(MAX)
SET @columns = N''
--Get column names for entire pivoting
SELECT @columns += N', ' + QUOTENAME(Zone)
FROM (select distinct Zone
from iGuide WHERE (DMA LIKE @Filter) OR (Channel = @Filter) OR (@Filter = ' Select All') OR (@Filter = 'Select All') OR (Zone LIKE @Filter) OR (Machine LIKE @Filter) OR (Company LIKE @Filter) OR (HQ LIKE @Filter) OR (Region LIKE @Filter)
) AS T
--select @columns
SET @sql = N'
SELECT Distinct Channel, ' + STUFF(@columns, 1, 2, '') + '
FROM iGuide
PIVOT
(
count(Zone) FOR Zone IN ('
+ STUFF(REPLACE(@columns, ', [', ',['), 1, 1, '')
+ ')
) AS Pivot1 ORDER BY Channel
'
PRINT @sql;
EXEC sp_executesql @sql;
Каков ваш текущий результат с этим запросом? \t Пожалуйста, прочитайте [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t И вот отличное место для [** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/), чтобы узнать, как улучшить качество вопроса и получить лучшие ответы. \t [** Как создать минимальный, полный и проверяемый пример **] (http://stackoverflow.com/help/mcve) –
Я получаю вывод всего в столбце ACC. Я не хочу видеть строки с NULL. _____________ –
И каковы ваши исходные данные? Мне кажется, что вы должны фильтровать перед отправкой на pivot –