我有一张顾客表
Customer ID Name
1 John
2 Lewis
3 Mary
Run Code Online (Sandbox Code Playgroud)
我有另一张表CustomerRewards
TypeID Description
1 Bronze
2 Silver
3 Gold
4 Platinum
5 AnotherOne
Run Code Online (Sandbox Code Playgroud)
决赛桌
RewardID TypeID CustomerID
1 1 1
2 1 1
3 2 1
4 2 2
Run Code Online (Sandbox Code Playgroud)
customerTypes表是动态的,可以添加和删除许多这些类型.基本上我想要的是动态生成的列和每个列中的计数,类似于
CustomerName Bronze Silver Gold Platinum AnotherOne total
John 2 1 0 0 0 3
Lewis 0 1 0 0 0 1
Grand TOTAL 2 2 0 0 0 4
Run Code Online (Sandbox Code Playgroud)
问题就像我说的那样,类型是动态的,客户是动态的,所以我需要根据系统中的类型使列成为动态的
我已经在DataGridView中标记了c#,因为我需要它
提前致谢
很抱歉这个问题很长,但是这里包含了我用来测试场景的所有SQL,希望能够清楚地说明我在做什么.
我在SQL Server 2005中构建了一些动态SQL来生成PIVOT表.
下面是执行此操作的代码.使用各种选择显示原始数据使用GROUP BY的值和PIVOT中的值,我想要它们.
BEGIN TRAN
--Create the table
CREATE TABLE #PivotTest
(
ColumnA nvarchar(500),
ColumnB nvarchar(500),
ColumnC int
)
--Populate the data
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'X', 1)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'Y', 2)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'Z', 3)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'X', 4)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('A', 'Y', 5)
INSERT INTO #PivotTest (ColumnA, ColumnB, ColumnC) VALUES('B', 'Z', 6)
INSERT …
Run Code Online (Sandbox Code Playgroud) sql-server pivot sql-injection sql-server-2005 dynamic-pivot
我有一个包含产品ID和名称的表格,另一个表格包含这些产品在特定日期的库存.比如Item1
有6
库存1-1-2014
和8
库存2-1-2014
.我试图在存储过程中显示这些内容,使其看起来像一个日历,显示一个月中的所有日期以及单元格中可用的库存.展示这个的最佳方式是什么?
例如:
Name | 1-1-2014 | 2-1-2014 | 3-1-2014 | 4-1-2014
Item1 | 6 | 8 | | 6
Item2 | | 2 | 1 |
Run Code Online (Sandbox Code Playgroud)
原始表 - 名称
ID | Name
1 | Item1
2 | Item2
Run Code Online (Sandbox Code Playgroud)
原始表 - Stockdates
ID | NameID | Stock | Date
1 | 1 | 8 | 2-1-2014
2 | 2 | 2 | 4-1-2014
Run Code Online (Sandbox Code Playgroud) 设一个名为 data 的表,其中包含 time、sensor、value 列:
我想在 Athena (Presto) 上旋转该表以获得一个像这样的新表:
为此,可以运行以下查询:
SELECT time,
sensor_value['temperature'] as "temperature",
sensor_value['pressure'] as "pressure"
FROM (
SELECT time, mapp_agg(sensor, value) sensor_value
FROM data
GROUP BY time
)
Run Code Online (Sandbox Code Playgroud)
这效果很好。但是,我必须指定sensor_value 的键。因此,我需要知道传感器的唯一值,然后相应地手动编写查询。问题是我没有这样的信息。您知道解决此问题的通用(且有效)解决方案吗?我真的很感激任何帮助。谢谢。
我正在对包含以下内容的表进行动态数据透视查询:
size列包含不同的大小,具体取决于OID.
所以,使用这里找到的代码,我把它放在一起:
DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)
SELECT @listCol = STUFF(( SELECT distinct '], [' + [size]
FROM #t
FOR
XML PATH('')
), 1, 2, '') + ']'
SET @query = 'SELECT * FROM
(SELECT OID, [size], [quantity]
FROM #t
) src
PIVOT (SUM(quantity) FOR Size
IN (' + @listCol + ')) AS pvt'
EXECUTE ( @query )
Run Code Online (Sandbox Code Playgroud)
除了列标题(大小标签)不在基于bucketnum列的顺序之外,这种方法很有效.这些是基于尺寸的顺序.
我在枢轴后尝试了可选的Order By,但这不起作用.
如何控制列的显示顺序?
谢谢
在SQL Server 2008中,我有一个包含3列的表(tblStock):
- PartCode(NVARCHAR(50))
- StockQty(INT)
- 位置(NVARCHAR(50))
下面的一些示例数据:
PartCode StockQty Location
......... ......... .........
A 10 WHs-A
B 22 WHs-A
A 1 WHs-B
C 20 WHs-A
D 39 WHs-F
E 3 WHs-D
F 7 WHs-A
A 9 WHs-C
D 2 WHs-A
F 54 WHs-E
Run Code Online (Sandbox Code Playgroud)
如何创建程序以获得如下结果?
PartCode WHs-A WHs-B WHs-C WHs-D WHs-E WHs-F Total
........ ..... ..... ..... ...... ..... ..... .....
A 10 1 9 0 0 0 20
B 22 0 0 0 0 0 22
C 20 0 0 …
Run Code Online (Sandbox Code Playgroud) 我需要透过以下名为tblGameRoleName的表 -
Game Role Name VolleyBall Coach Sujatha VolleyBall Player Rajendran VolleyBall Player Juno VolleyBall Player Indira VolleyBall Player Ganesh VolleyBall Player Vasanth Tennis Coach Rajeshkumar Tennis Player Vivek Tennis Player Rubala
到下面有多次'Player'列的表 -
Game Coach Player1 Player2 Player3 Player4 Player5 VolleyBall Sujatha Rajendran Juno Indira Ganesh Vasanth Tennis Rajeshkumar Vivek Rubala NULL NULL NULL
问题是"玩家"的数量可以针对不同的"游戏"增加,结果表应该显示所有游戏的所有玩家.例如 - 如果我将以下'板球'团队添加到此表中 -
Cricket Coach Gary Cricket Player Viru Cricket Player Gauti Cricket Player Sachin Cricket Player Mahi Cricket Player Yuvi Cricket Player Suresh …
我有一张这样的产品零件表:
部分
part_id part_type product_id
--------------------------------------
1 A 1
2 B 1
3 A 2
4 B 2
5 A 3
6 B 3
Run Code Online (Sandbox Code Playgroud)
我想要一个返回如下表格的查询:
product_id part_A_id part_B_id
----------------------------------------
1 1 2
2 3 4
3 5 6
Run Code Online (Sandbox Code Playgroud)
在实际实施中,将有数百万个产品部件
我有一个 MySql 查询,我想动态地旋转该查询,将公司名称作为列标题,将公司财务字段作为行标题。
目前我有这个:
SELECT Company, TotalRevenue, Overhead, TotalJobCosts, GrossProfit
FROM comp_financials
Run Code Online (Sandbox Code Playgroud)
这给了我这个:
公司 | 总收入 | 高架 | 总工作成本 | 毛利 |
---|---|---|---|---|
芝加哥最好的建筑 | 2098001 | 363750 | 1424420 | 673581 |
琼斯建筑公司 | 4509458 | 1067008 | 2876568 | 1632890 |
我希望得到这样的东西:
芝加哥最好的建筑 | 琼斯建筑公司 | |
---|---|---|
总收入 | 2098001 | 4509458 |
高架 | 363750 | 1067008 |
总工作成本 | 1424420 | 2876568 |
毛利 | 673581 | 1632890 |
拥有未知数量的公司及其价值(但通常少于 20 家)。
到目前为止,我已经将公司名称动态显示为列标题,但无法了解如何显示行值(行标题不是必需的)。
SET @@group_concat_max_len = 32000;
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN Company = ''',
Company,
''' THEN Company ELSE NULL END) AS ',
CONCAT('`', Company, '`')
)) INTO @sql
FROM comp_financials;
SET …
Run Code Online (Sandbox Code Playgroud)