【发布时间】:2014-11-22 12:39:10
【问题描述】:
注意:本帖与上一帖略有不同。
我有下表,详细信息如下示例所示。
示例:
表格:测试
create table test
(
cola varchar(10),
colb varchar(10),
colc varchar(10)
);
插入:
insert into test values('101','1234','A1');
insert into test values('101','4321','A2');
insert into test values('201','5678','A3');
insert into test values('301','8765','A4');
insert into test values('401','9877','A1');
insert into test values('101','9997','A6');
insert into test values('201','2277','A1');
insert into test values('201','1577','A5');
注意:现在我只想显示cola 属于colc 值的记录。如果用户将colc 值作为参数传递给存储过程,则它必须匹配colc 的确切值属于哪个cola 值。
预期结果:
如果用户通过A1,A2,A6 那么结果应该是:
cola A1 A2 A6
--------------------
101 1 1 1
注意:在上面的结果中,记录101出现是因为它属于A1,A2,A6而不是其他值。 201 不会出现,因为它也属于 A1,A3 和 A5。
如果用户通过A1 那么结果应该是:
cola A1
--------
401 1
注意:在上面的结果中,记录401出现是因为它属于A1。
我的尝试:
透视查询:
DECLARE @Stuff varchar(max) = 'A1'
DECLARE @Sql varchar(max)
SET @Sql = 'SELECT cola,' +@Stuff+ '
from
(
select cola,colc
from test
where colc in(''A1'')
group by cola,colc
having count(distinct colc) = 1
)p
PIVOT
(
COUNT(colc)
FOR colc IN ('+@Stuff+')
)AS pvt'
PRINT(@Sql)
EXEC(@Sql)
获取结果:
cola A1
----------
101 1
401 1
你可以去这里练习一下:
SQL 小提琴:
【问题讨论】:
标签: sql-server sql-server-2008-r2 pivot