这是数据的一小部分。在实际数据中,“名称”和“代码”下的值有数百个,并且这些值经常更改。因此,对Pivot语句进行硬编码将不起作用。需要创建一个动态SQL语句-
我需要帮助。
DECLARE @Test Table
(
Name Varchar(32),
Code Varchar(20)
)
INSERT INTO @Test(Name, Code) VALUES
('A-1', 'A-One')
, ('A 2', 'A-Two')
, ('B 1-b', 'B-One')
, ('B', 'A-Two')
, ('C', 'A-One')
, ('C', 'B-One')
, ('C', 'C-One')
样本数据集看起来像这样[再次,这只是一个小样本]:
Name Code
A-1 A-One
A 1 A-Two
B 1-b B-One
B A-Two
C A-One
C B-One
C C-One
请注意,代码值(例如A-One,A-Two和B-One)可能与一个以上的Name值相关联。
例如,A-One与名称A-1以及名称C一起出现。
我想输出它,使其看起来像这样[除了,除了我显示的值外,还有更多的值-并且这些值可以更改]:
A-1 A 1 B 1-b B C
A-One X X
A-Two X X
B-One X X
C-One X
“名称”值和“代码”值的数量可以更改。它们不是恒定的。
目的是能够在左侧查看“代码”值的列表-并轻松查看与“代码”关联的“名称”值。
我相信这需要创建动态数据透视表sql,并且我在理解数据透视表sql时遇到了麻烦,我将不胜感激任何帮助或指针。
您可以使用动态枢轴:
create table dbo.test([Name] Varchar(32), Code Varchar(30))
insert into dbo.test values
('A-1', 'A-One')
, ('A 2', 'A-Two')
, ('B 1-b', 'B-One')
, ('B', 'A-Two')
, ('C', 'A-One')
, ('C', 'B-One')
, ('C', 'C-One')
declare @cols nvarchar(max)='' --holds all the values that will become column names
declare @alias nvarchar(max)='' --holds values that will become column names and converts values to 'x'
declare @sql nvarchar(max)='' --contains the TSQL dinamically generated
select @cols = @cols + ', [' + [Name] + ']'
from dbo.test
group by [Name]
select @alias = @alias + ', case when T.[' + [Name] + '] is not null then ''x'' else '''' end as [' + [Name] + ']'
from dbo.test
group by [Name]
set @cols = RIGHT(@cols, len(@cols)-2)
set @sql = @sql + ' select T.Code ' + @alias + ' from ('
set @sql = @sql + ' select piv.[Code], ' + @cols
set @sql = @sql + ' from dbo.test '
set @sql = @sql + ' pivot (max([Name]) for [Name] in ('+@cols+') ) piv '
set @sql = @sql + ' ) T'
--execute dynamic query
exec(@sql)
结果:
问题内容: 我已经尽力理解如何在SQL中创建数据透视表,但是我无法对其进行管理! 我有以下几列: 拥有60万行数据。 我在下面的数据透视表中需要它们; StartHour作为列标题 作为行标题 作为数据 其中=‘1’作为过滤器。 数据透视表 我设法获得了以下代码,该方法有效,但仅给我date_1作为列标题,而不给我StartHour,或者将filter作为date_source =‘1’。 谢谢你
好的,我有一张像这样的桌子 现在我需要把它变成这样: 我一直在查看动态枢轴示例,但似乎我无法将它们放入我的场景中。 有人能帮忙吗?
问题内容: 我找到了一个不错的脚本,该脚本可以为透视表动态按列名创建,但是我没有将分配的值重新返回到表中。这是我的出发桌。 我运行此SQL生成我想要的数据透视表中的列 这给了我以下输出 当我为数据透视表运行动态SQL时 我看到这个结果… 我尝试了几种不同的方法,但是对于这种方法为什么不起作用,我没有提出解决方案。 所需的输出将是ORDER_ID列顺序正确的位置 但这也将对我的应用程序起作用。 问题
问题内容: …枢轴((X)中B的总和(A)) 现在,B的数据类型为varchar2,X为一串由逗号分隔的varchar2值。 X的值是从同一表的列(例如CL)中选择不同的值。这种枢轴查询工作的方式。 但是问题是,每当CL列中有一个新值时,我都必须手动将其添加到字符串X中。 我尝试用从CL选择不同的值替换X。但是查询未运行。 我感觉到的原因是因为要替换X,我们需要用逗号分隔的值。 然后,我创建了一个
问题内容: 嗨,我正在尝试在SQL Server下表中进行数据透视 我希望输出为 原始表中的列数是已知的,但行数是未知的。谁能帮忙 问题答案: 如果要将数字包括在列名中,则仍然需要先取消透视和列,然后再应用透视。所不同的是,您会将数字连接到在取消透视过程中创建的列名。 对于已知数量的值,查询将为: 然后,如果您有未知的数字,则动态SQL版本将为:
使用 Raw SQL 查询,无需使用 ORM 表定义 多数据库,都可直接使用占位符号 ?,自动转换 查询时的参数,支持使用 Model Struct 和 Slice, Array ids := []int{1, 2, 3} p.Raw("SELECT name FROM user WHERE id IN (?, ?, ?)", ids) 创建一个 RawSeter o := orm.NewOrm