【发布时间】:2017-04-14 00:17:35
【问题描述】:
我可以过滤列,但不能过滤行。
这是我与 PIVOT 一起使用的 iGuide Table 数据:
/////////////////////////////////////////////////////
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 = 'ACC' 后得到的当前结果:
_________________________________________________
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;
【问题讨论】:
-
该查询的当前结果是什么?请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 How to create a Minimal, Complete, and Verifiable example
-
我得到了 ACC 列中所有内容的输出。我不想看到带有 NULL 的行。 _____________
-
你的源数据是什么?在我看来,您应该在发送到枢轴之前进行过滤
-
你好 Juan,我使用 Sql Server 数据库作为数据源。
-
我的意思是给我们展示样本数据,你只给我们展示结果
标签: sql filter pivot where procedure