【发布时间】:2019-06-29 01:20:12
【问题描述】:
EDIT2:我做了一个新的可用示例,进入下一步,但仍然不知道如何做一些事情。请检查。
我有下表:
CREATE TABLE [dbo].[MyTable] (
[ID] [int] IDENTITY(1,1) NOT NULL
,[Name] [nvarchar](50) NULL
,[Quantity] [int] NULL
,[Period] [nvarchar](10) NULL
)
INSERT [dbo].[MyTable] VALUES
('foo', 1, 'Jan'),
('bar', 2, 'Jan'),
('foo', 1, 'Jan'),
('kin', 1, 'Jan'),
('blat', 5, 'Jan'),
('foo', 3, 'Feb'),
('bar', 1, 'Feb'),
('kin', 2, 'Feb'),
('blat',4, 'Feb'),
('foo', 1, 'Feb'),
('kin', 7, 'Feb'),
('blat', 1, 'Feb'),
('foo', 3, 'Mar'),
('bar', 1, 'Mar'),
('kin', 1, 'Mar'),
('blat', 1, 'Mar'),
('bar', 1, 'Mar'),
('kin', 2, 'Mar'),
('blat', 3, 'Mar')
我想通过在查询中使用 PIVOT 来实现图片中的结果:
到目前为止我的查询:
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N', p.' + QUOTENAME(Period)
FROM (SELECT Period FROM dbo.MyTable AS p
GROUP BY Period) AS x;
SET @sql = N'
SELECT ' + STUFF(@columns, 1, 2, '') + '
FROM
(
SELECT Name, Period, Quantity
FROM dbo.MyTable AS p
) AS j
PIVOT
(
SUM(Quantity) FOR Period IN ('
+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '')
+ ')
) AS p;';
EXEC sp_executesql @sql;
给我下面的结果:
如何添加行名(foo、bar、kin、blat)、列名 Name、SUM 等?
EDIT3:如何对列和记录进行“排序”?
【问题讨论】:
-
这里的一些实际样本数据和预期结果会有所帮助。
-
为什么要写查询?如果你想在 excel 中使用它,请使用数据透视表。这是最简单的解决方案。事实上我很困惑 - 你已经在你的例子中使用了一个数据透视表
-
样本数据在图片中,预期结果在第一个。因为它是整个过程的一部分,需要通过 SQL 实现自动化。请把 excel 中的结果与 SQL 中的结果进行比较。
-
那张图片不是样本数据,这是预期的结果;和图片对消耗性数据没有帮助。
-
我明白了,但你为什么需要样本数据。我的目标是像在 Excel 中一样在查询中添加 PartName 行,而不是我有 PartName 行的 SUM。
标签: sql-server excel tsql pivot pivot-table