我是SQL数据透视查询的新手,并且陷入数据透视的透视结果。SQL Server - 数据透视的枢轴点
我有一个名为“ExampleSales”的表。我想找到每月(甚至每日,每周,每月,每年)员工和项目明智的销售额。以下是表,示例数据和第一级枢轴的示例。
CREATE TABLE [dbo].[ExampleSales](
[SalesId] [int] IDENTITY(1,1) NOT NULL,
[ItemCode] [varchar](50) NOT NULL,
[EmployeeName] [varchar](250) NOT NULL,
[Amount] [decimal](18, 2) NOT NULL,
[SalesDate] [datetime2](7) NOT NULL,
CONSTRAINT [PK_ExampleSales] PRIMARY KEY CLUSTERED
(
[SalesId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
的样本数据:
SET IDENTITY_INSERT [dbo].[ExampleSales] ON
GO
INSERT [dbo].[ExampleSales] ([SalesId], [ItemCode], [EmployeeName], [Amount], [SalesDate]) VALUES (1, N'A1', N'Michel John', CAST(120.00 AS Decimal(18, 2)), CAST(0x07207D922A5ADF3C0B AS DateTime2))
GO
INSERT [dbo].[ExampleSales] ([SalesId], [ItemCode], [EmployeeName], [Amount], [SalesDate]) VALUES (2, N'A1', N'Mark Ven', CAST(50.00 AS Decimal(18, 2)), CAST(0x07D07748385AF33C0B AS DateTime2))
GO
INSERT [dbo].[ExampleSales] ([SalesId], [ItemCode], [EmployeeName], [Amount], [SalesDate]) VALUES (3, N'A2', N'Michel John', CAST(50.00 AS Decimal(18, 2)), CAST(0x07F05983465A023D0B AS DateTime2))
GO
INSERT [dbo].[ExampleSales] ([SalesId], [ItemCode], [EmployeeName], [Amount], [SalesDate]) VALUES (4, N'A2', N'Mark Ven', CAST(150.00 AS Decimal(18, 2)), CAST(0x073054DF505AFD3C0B AS DateTime2))
GO
INSERT [dbo].[ExampleSales] ([SalesId], [ItemCode], [EmployeeName], [Amount], [SalesDate]) VALUES (5, N'A3', N'Michel John', CAST(23.00 AS Decimal(18, 2)), CAST(0x0730AC235F5ADF3C0B AS DateTime2))
GO
INSERT [dbo].[ExampleSales] ([SalesId], [ItemCode], [EmployeeName], [Amount], [SalesDate]) VALUES (6, N'A3', N'Mark Ven', CAST(56.00 AS Decimal(18, 2)), CAST(0x07F02161695AF33C0B AS DateTime2))
GO
INSERT [dbo].[ExampleSales] ([SalesId], [ItemCode], [EmployeeName], [Amount], [SalesDate]) VALUES (7, N'A4', N'Michel John', CAST(54.00 AS Decimal(18, 2)), CAST(0x07C09BB2825A023D0B AS DateTime2))
GO
INSERT [dbo].[ExampleSales] ([SalesId], [ItemCode], [EmployeeName], [Amount], [SalesDate]) VALUES (8, N'A4', N'Mark Ven', CAST(100.00 AS Decimal(18, 2)), CAST(0x0750622E925ADB3C0B AS DateTime2))
GO
SET IDENTITY_INSERT [dbo].[ExampleSales] OFF
GO
第一级枢查询
SELECT
DateName(month , DateAdd(month , DATEPART(m,SalesDate) , 0) - 1) AS 'month',EmployeeName,[A1] ,[A2],[A3],[A4]
FROM
(SELECT
Salesid,SalesDate,EmployeeName,ItemCode
FROM
ExampleSales
) AS SourceTable
PIVOT
(
COUNT(Salesid)
FOR ItemCode IN([A1] ,[A2],[A3],[A4])
) AS PivotTable
Output of my first pivot query is
现在,我在这里停留。我希望下一个级别如下。
Need covert first pivot to next level pivot as below
感谢Ranjana为我冗长的查询提供了非常简单的解决方案。只是想知道如何使这个列动态。 –
下面是一个让Cols动态的好方法吗? DECLARE @c AS NVARCHAR(MAX), @q AS NVARCHAR(MAX) SET @c = STUFF((SELECT DISTINCT '' + QUOTENAME(CONCAT(employeename, '(',itemcode, ')') ) FROM [DBO]。[examplesales]ç FOR XML PATH( ''),TYPE )。价值( ' ' 'NVARCHAR(MAX)') ,1,1,'') SELECT @作为S pivot(count)选择*从 (选择salesid,datename(month,salesdate)as mn,concat(employeename,''('',itemcode,'')'')作为来自样本销售的项目 ) ((+'c +')项目的销售ID)p' EXEC SP_EXECUTESQL @q –
你好@ChiragMehta我已经评论过另一个动态的答案。 –