我有一个表"项目",其中包含许多相关项目,如下所示:
ID Rel_ID Name RelRank
--- ------ ---- -------
1 1 foo 1
2 1 bar 2
3 1 zam 3
4 2 foo2 1
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取查询,因此具有相同Rel_ID的项目将出现在同一行中,如下所示:
Rel_ID Name1 Name2 Name3
------ ----- ----- -----
1 foo bar zam
2 foo2
Run Code Online (Sandbox Code Playgroud)
我尝试过多次选择表格:
SELECT k.Rel_ID, k.name 'Name1', k2.name 'Name2'
FROM item k, item k2
WHERE k.Rel_ID = k2.Rel_ID
Run Code Online (Sandbox Code Playgroud)
但这失败了.当然有一个转换或查询可以大大简化过程,我只是错过它,因为我之前没有以这种方式使用SQL.我错过了什么?
[编辑:添加了RelRank列,确实出现在我的数据中]
很抱歉这个问题很长,但是这里包含了我用来测试场景的所有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
好的我有一张看起来像这样的桌子
ItemID | ColumnName | Value
1 | name | Peter
1 | phone | 12345678
1 | email | peter@host.com
2 | name | John
2 | phone | 87654321
2 | email | john@host.com
3 | name | Sarah
3 | phone | 55667788
3 | email | sarah@host.com
Run Code Online (Sandbox Code Playgroud)
现在我需要把它变成这个:
ItemID | name | phone | email
1 | Peter | 12345678 | peter@host.com
2 | John | 87654321 | john@host.com
3 | Sarah | 55667788 | sarah@host.com …Run Code Online (Sandbox Code Playgroud) TRANSFORM Avg(CASE WHEN [temp].[sumUnits] > 0
THEN [temp].[SumAvgRent] / [temp].[sumUnits]
ELSE 0
END) AS Expr1
SELECT [temp].[Description]
FROM [temp]
GROUP BY [temp].[Description]
PIVOT [temp].[Period];
Run Code Online (Sandbox Code Playgroud)
需要为sql server转换此查询
我已阅读所有其他帖子但无法将其转换为相同的内容
这是我当前的mysql表的样子:
PunchID EmpID PunchEvent PunchDateTime
1 0456 clockin 5/14/2013 8:36:26 AM
48 0456 breakout 5/14/2013 12:01:29 PM
53 0456 breakin 5/14/2013 12:28:31 PM
54 0456 clockout 5/14/2013 2:28:33 PM
57 0456 clockin 5/15/2013 7:38:34 AM
58 0456 breakout 5/15/2013 7:38:39 AM
59 0456 breakin 5/15/2013 7:38:41 AM
60 0456 clockout 5/15/2013 7:38:42 AM
Run Code Online (Sandbox Code Playgroud)
现在我想返回一个基于星期几分组的结果集,如下所示:
Day ClockIn BreakOut BreakIn ClockOut
Tuesday 8:36:26 AM 12:01:29 PM 12:28:31 PM 2:28:33 PM
Wednesday 7:38:34 AM etc, etc...
Run Code Online (Sandbox Code Playgroud)
这是我目前的查询.但它只返回每天的第一拳.
SELECT DATE_FORMAT(PunchDateTime, '%W') as day, PunchEvent, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Oracle中使用PIVOT,我得到了一个奇怪的结果.它可能只是我需要设置的一个选项,但我对Oracle/SQL的了解可以放在这个评论框中.
这是我的查询示例:
with testdata as
(
select 'Fred' First_Name, 10 Items from dual
union
select 'John' First_Name, 5 Items from dual
union
select 'Jane' First_Name, 12 Items from dual
union
select 'Fred' First_Name, 15 Items from dual
)
select * from testdata
pivot (
sum(Items)
for First_Name
in ('Fred','John','Jane')
Run Code Online (Sandbox Code Playgroud)
结果如我所料,除了列名称周围有单引号(来自Toad的图片 - 如果我导出到Excel,引号会被带到Excel):

如何摆脱列名称周围的单引号?我尝试在"in"子句中取出它们,我收到一个错误:
in (Fred,John,Jane)
Run Code Online (Sandbox Code Playgroud)

我也尝试用双引号替换单引号并得到相同的错误.我不知道这是否是我需要在运行查询或Toad之前设置/取消设置的Oracle选项.
我在Oracle表(tab1)中有以下示例数据,我正在尝试将行转换为列.我知道如何在一列上使用Oracle pivot.但是可以将它应用于多个列吗?
样本数据:
Type weight height
A 50 10
A 60 12
B 40 8
C 30 15
Run Code Online (Sandbox Code Playgroud)
我的预期输出:
A-count B-count C-count A-weight B-weight C-weight A-height B-height C-height
2 1 1 110 40 30 22 8 15
Run Code Online (Sandbox Code Playgroud)
我可以做什么:
with T AS
(select type, weight from tab1 )
select * from T
PIVOT (
count(type)
for type in (A, B, C, D,E,F)
)
Run Code Online (Sandbox Code Playgroud)
以上查询给出了以下结果
A B C
2 1 1
Run Code Online (Sandbox Code Playgroud)
我可以count(*)用sum(weight)或替换sum(height)高度或重量.我想要做的,但我不能做,是在一个查询中转动所有三个(计数,重量和高度).
可以用枢轴完成吗?
我有一个带Pivot控件的页面,在某些情况下我不想显示特定的内容PivotItem.
设置Visibility为折叠似乎根本不会影响它.
有什么建议?
我在SQL Server中有两个表:Customer和Address
客户表:
CustomerID FirstName LastName
----------- ---------- ----------
1 Andrew Jackson
2 George Washington
Run Code Online (Sandbox Code Playgroud)
地址表:
AddressID CustomerID AddressType City
----------- ----------- ----------- ----------
1 1 Home Waxhaw
2 1 Office Nashville
3 2 Home Philadelphia
Run Code Online (Sandbox Code Playgroud)
这是我需要的输出:
CustomerID Firstname HomeCity OfficeCity
----------- ---------- ---------- ----------
1 Andrew Waxhaw Nashville
2 George Philadelphia Null
Run Code Online (Sandbox Code Playgroud)
这是我的查询,但没有得到正确的结果:
SELECT CustomerID, Firstname, HOme as HomeCity, Office as OfficeCity FROM
(SELECT C.CustomerID, C.FirstName, A.AddressID, A.AddressType, A.City
FROM Customer C, Address A
WHERE C.CustomerID = …Run Code Online (Sandbox Code Playgroud) 我在sql server 2008R2中有以下源表和目标表.如何在TSQL中执行pivot(s)以从源到达目标.
SourceTbl
empId empIndex empState empStDate empEndDate
========================================================
10 1 AL 1/1/2012 12/1/2012
10 2 FL 2/1/2012 2/1/2013
15 1 FL 3/20/2012 1/1/2099
Run Code Online (Sandbox Code Playgroud)
DestTbl
empId empState1 empState1StDate empState1EndDt empState2 empState2StDate empState2EndDt
=========================================================================================================
10 AL 1/1/2012 12/1/2012 FL 2/1/2012 2/1/2013
15 FL 3/20/2012 1/1/2099 NULL NULL NULL
Run Code Online (Sandbox Code Playgroud)
希望empIndex以某种方式帮助支点.