我有一个以下格式的数据库:
ID TYPE SUBTYPE COUNT MONTH
1 A Z 1 7/1/2008
1 A Z 3 7/1/2008
2 B C 2 7/2/2008
1 A Z 3 7/2/2008
Run Code Online (Sandbox Code Playgroud)
我可以使用SQL将其转换为:
ID A_Z B_C MONTH
1 4 0 7/1/2008
2 0 2 7/2/2008
1 0 3 7/2/2008
Run Code Online (Sandbox Code Playgroud)
所以,在TYPE,SUBTYPE连接成新的列和COUNT总结的地方ID和MONTH比赛.
任何提示将不胜感激.这可能在SQL中,还是我应该手动编程?
该数据库是SQL Server 2005.
假设有数百TYPES和SUBTYPES因此与"A"和"Z"不应该被硬编码,但动态生成的.
我在表格中有数据如下所示:
MONTH VALUE
1 100
2 200
3 300
4 400
5 500
6 600
Run Code Online (Sandbox Code Playgroud)
我想编写一个SQL查询,以便得到如下结果:
MONTH_JAN MONTH_FEB MONTH_MAR MONTH_APR MONTH_MAY MONTH_JUN
100 200 300 400 500 600
Run Code Online (Sandbox Code Playgroud) 我看过很多博文.我已经阅读了文档.我通常相当擅长拾取新东西,但即使我继续阅读,但我只是不理解SQL Server(2008)中的PIVOT部分.
有人可以把它给我,好又慢.(即傻瓜的枢轴)
如果需要一个例子,那么我们可以使用这个问题中的一个.
以下是我尝试转动该示例的方法:
SELECT OtherID, Val1, Val2, Val3, Val4, Val5
FROM
(SELECT OtherID, Val
FROM @randomTable) p
PIVOT
(
max(val)
FOR Val IN (Val1, Val2, Val3, Val4, Val5)
) AS PivotTable;
Run Code Online (Sandbox Code Playgroud)
上面的查询给出了空值而不是Val1,Val2 ...列中的值.
但要明确的是,我不是在寻找一个固定的查询.我需要了解 PIVOT,因为我正在寻找比这个例子更复杂的东西.
具体来说,聚合的交易是什么?我只想获取与给定ID匹配的所有字符串值并将它们放在同一行中.我不想集合任何东西.(再次,请看我的例子中的这个问题.)
是否可以从表中执行PIVOT并选择列表,而不是使用单个值?
像这样(语法错误不正确):
SELECT *
FROM (
SELECT RepID, MilestoneID, ResultID FROM RM
) AS src
PIVOT (
MAX(ResultID) FOR MilestoneID IN (SELECT id FROM m)
) AS pvt
Run Code Online (Sandbox Code Playgroud)
这个编译,但不适合我:
SELECT *
FROM (
SELECT RepID, MilestoneID, ResultID FROM RM
) AS src
PIVOT (
MAX(ResultID) FOR MilestoneID IN ([1], [2], [3], [4])
) AS pvt
Run Code Online (Sandbox Code Playgroud)
PS:我不想使用动态SQL,有没有办法在不使用动态SQL的情况下执行此操作?
我想提取从EAV(实体属性值)的表,或更具体实体的元数据表的结果(认为像WordPress wp_posts和wp_postmeta),为"很好的格式化的关系表",以做一些排序和/或过滤.
我已经找到了一些如何在查询中格式化结果的示例(而不是编写2个查询并在代码中加入结果),但我想知道"最有效"的方法,特别是对于更大的结果集.
当我说"效率最高"时,我的意思是出现以下情况:
获取姓氏为XYZ的所有实体
返回按生日排序的实体列表
转过来:
** ENTITY ** ----------------------- ID | NAME | whatever ----------------------- 1 | bob | etc 2 | jane | etc 3 | tom | etc ** META ** ------------------------------------ ID | EntityID | KEY | VALUE ------------------------------------ 1 | 1 | first name | Bob 2 | 1 | last name | Bobson 3 | 1 | birthday | 1983-10-10 . | 2 | first name | Jane …
mysql performance database-design pivot entity-attribute-value
我正面临着以下挑战.我需要在同一列上旋转两次表数据.这是数据的屏幕截图.

我希望每个商品ID都有一行,其中包含每年的购买价值和销售价值.我尝试通过两次选择"年份"列进行此操作,将其格式化一点,以便每个销售年份都以"S"为前缀,每个购买年份以"P"开头,并使用2个枢轴围绕2年列旋转.这是SQL查询(在SQL Server 2008中使用):
SELECT [Item ID],
[P2000],[P2001],[P2002],[P2003],
[S2000],[S2001],[S2002],[S2003]
FROM
(
SELECT [Item ID]
,'P' + [Year] AS YearOfPurchase
,'S' + [Year] AS YearOfSelling
,[Purchasing value]
,[Selling value]
FROM [ItemPrices]
) AS ALIAS
PIVOT
(
MIN ([Purchasing value]) FOR [YearOfPurchase] in ([P2000],[P2001],[P2002],[P2003])
)
AS pvt
PIVOT
(
MIN ([Selling value]) FOR [YearOfSelling] in ([S2000],[S2001],[S2002],[S2003])
)
AS pvt2
Run Code Online (Sandbox Code Playgroud)
结果并不完全是我所希望的(见下图):

如您所见,每个商品ID仍有多行.有没有办法将每行的行数减少到一个?所以它看起来有点像下面的Excel截图?

... pivot((X)中B的总和(A))
现在B的数据类型为varchar2,X是由逗号分隔的varchar2值的字符串.
X的值是来自同一表的列(比如CL)的不同值.这种方式使用数据透视查询.
但问题是,只要列CL中有新值,我必须手动将其添加到字符串X.
我尝试用CL中的select distinct值替换X. 但查询未运行.
我觉得的原因是因为替换X我们需要用逗号分隔的值.
然后我创建了一个函数来返回精确的输出以匹配字符串X.但查询仍然没有运行.
显示的错误消息类似于"丢失righr parantheses","文件结束通信通道"等等.
我尝试使用pivot xml而不仅仅是pivot,查询运行但是提供了像oraxxx等这些根本没有值的值.
也许我没有正确使用它.
你能告诉我一些用动态值创建枢轴的方法吗?
我为提交关于这个主题的另一个问题而道歉,但我已经阅读了很多这方面的答案,我似乎无法让它为我工作.
我有三个表需要加入并提取信息.其中一个表只有3列并垂直存储数据.我想将这些数据转换为横向格式.
如果我只是加入并拉动,数据将如下所示:
SELECT
a.app_id,
b.field_id,
c.field_name,
b.field_value
FROM table1 a
JOIN table2 b ON a.app_id = b.app_id
JOIN table3 c ON b.field_id = c.field_id --(table3 is a lookup table for field names)
Run Code Online (Sandbox Code Playgroud)
结果:
app_id | field_id | field_name | field_value
-----------------------------------------------------
1234 | 101 | First Name | Joe
1234 | 102 | Last Name | Smith
1234 | 105 | DOB | 10/15/72
1234 | 107 | Mailing Addr | PO BOX 1234
1234 | 110 | Zip …Run Code Online (Sandbox Code Playgroud) 考虑以下数据帧:
item_id hour when date quantity
110 0YrKNYeEoa 1 before 2015-01-26 247286
111 0UMNiXI7op 1 before 2015-01-26 602001
112 0QBtIMN3AH 1 before 2015-01-26 981630
113 0GuKXLiWyV 1 after 2015-01-26 2203913
114 0SoFbjvXTs 1 after 2015-01-26 660183
115 0UkT257SXj 1 before 2015-01-26 689332
116 0RPjXnkiGx 1 after 2015-01-26 283090
117 0FhJ9RGsLT 1 before 2015-01-26 2024256
118 0FhGJ4MFlg 1 before 2015-01-26 74524
119 0FQhHZRXhB 1 before 2015-01-26 0
120 0FsSdJQlTB 1 before 2015-01-26 0
121 0FrrAzTFHE 1 before 2015-01-26 0
122 0FfkgBdMHi …Run Code Online (Sandbox Code Playgroud) 我是PostgreSQL的新手.
假设我有一张桌子
colorname Hexa rgb rgbvalue
Violet #8B00FF r 139
Violet #8B00FF g 0
Violet #8B00FF b 255
Indigo #4B0082 r 75
Indigo #4B0082 g 0
Indigo #4B0082 b 130
Blue #0000FF r 0
Blue #0000FF g 0
Blue #0000FF b 255
Run Code Online (Sandbox Code Playgroud)
如果我在SQL Server中做一个Pivot
SELECT colorname,hexa,[r], [g], [b]
FROM
(SELECT colorname,hexa,rgb,rgbvalue
FROM tblPivot) AS TableToBePivoted
PIVOT
(
sum(rgbvalue)
FOR rgb IN ([r], [g], [b])
) AS PivotedTable;
Run Code Online (Sandbox Code Playgroud)
我把输出作为
colorname hexa r g b
Blue #0000FF 0 0 255
Indigo #4B0082 …Run Code Online (Sandbox Code Playgroud) pivot ×10
sql ×5
sql-server ×5
oracle ×2
t-sql ×2
database ×1
mysql ×1
pandas ×1
performance ×1
postgresql ×1
python ×1
transpose ×1
unpivot ×1