Ich möchte Zeilen in meiner gespeicherten Prozedur filtern, wenn ich also nach einem Kanal suche, erhalte ich nur den Kanalwert, den ich in einem Parameterfeld angegeben habe. HierFilter Zeilen in der gespeicherten Prozedur SQL Server
ist der Code:
CREATE TABLE iGuide
([Zone] varchar(3), [Enabled] int, [Channel] varchar(4), [DMA] varchar(7), [Region] varchar(7), [HQ] varchar(10), [Machine] varchar(10))
;
INSERT INTO iGuide
([Zone], [Enabled], [Channel], [DMA], [Region], [HQ], [Machine])
VALUES
('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')
;
GO
CREATE Procedure [dbo].[Usp_GetWHERE]
@Filter Varchar(MAX)
AS
DECLARE @columns NVARCHAR(MAX)
,@sql NVARCHAR(MAX)
,@zone 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 (HQ LIKE @Filter) OR (Region LIKE @Filter)
) AS T
select @columns;
SET @zone = N''
--Get column names for entire pivoting
SELECT @zone += 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 (HQ LIKE @Filter) OR (Region LIKE @Filter)
) AS T
select @zone;
SET @zone = '(' + substring(@zone, 3, len(@zone)-2) + ')';
select @zone;
SET @sql = N'
SELECT [Channel], ' + STUFF(@columns, 1, 2, '') + '
FROM (SELECT Channel, [Zone]
FROM iGuide
WHERE [Zone] IN ' + @zone + ') as source
PIVOT
(
count([Zone]) FOR [Zone] IN ('
+ STUFF(REPLACE(@columns, ', [', ',['), 1, 1, '')
+ ')
) AS Pivot1 ORDER BY Channel
'
select @sql;
EXEC sp_executesql @sql;
GO
EXECUTE [dbo].Usp_GetWHERE N'AEN';
Ergebnis dieses Code:
Channel ACC ANJ CHI
1 AEN 1 1 1
2 CNN 1 1 1
3 ESPN 1 1 1
4 FOOD 1 0 1
5 HIST 1 1 0
Mein gewünschtes Ergebnis, wenn 'AEN' Ausführen als ein Wert sein sollte:
Channel ACC ANJ CHI
1 AEN 1 1 1
Die einzige Frage, die ich habe ich jetzt eine Möglichkeit, Wildcards mit meiner Suche hinzuzufügen? Ich habe "=" mit "LIKE" -Operator ersetzt, aber wenn Sie AE% eingeben, wird meine Tabelle nicht gefüllt, aber der reguläre AEN-Name wird ausgefüllt –
Ich kann meine Tabelle jetzt nicht nach anderen Kriterien als einem Kanal filtern . –