SQL pivot按orderNr获取产品
我有两张桌子: “OrderHeader”包含OrderNr和OrderContact列。 'OrderDetail,包含OrderNr和OrderSerial列。 对于每个ordernr,最多有3个orderserials。 所以,我想得到的是一个包含列的表: 订单号 奥德接触 订单序列1 订单序列2 订单序列3 我现在被我的支点卡住了SQL pivot按orderNr获取产品,sql,sql-server,pivot,pivot-table,Sql,Sql Server,Pivot,Pivot Table,我有两张桌子: “OrderHeader”包含OrderNr和OrderContact列。 'OrderDetail,包含OrderNr和OrderSerial列。 对于每个ordernr,最多有3个orderserials。 所以,我想得到的是一个包含列的表: 订单号 奥德接触 订单序列1 订单序列2 订单序列3 我现在被我的支点卡住了 SELECT OrderNr, OderContact, [1] as OrderSerial1,
SELECT OrderNr,
OderContact,
[1] as OrderSerial1,
[2] as OrderSerial2,
[3] as OrderSerial3
FROM
(select H.OrderNR as OrderNr,
OrderContact as OderContact,
OrderSerialsNr
from OrderHeader H inner join OrderDetail D on H.OrderNr = D.OrderNr
) AS PivSource
PIVOT
(count(OrderSerialsNr) for OrderSerialsNr in([1],[2],[3])) as pvt
我用adventureworks数据库来做这个
USE [AdventureWorks2008R2]
GO
create view [test].[OrderHeader] (OrderNr,OrderContact)
as
SELECT SalesOrderID,
FirstName + ' ' + LastName
FROM Sales.SalesOrderHeader INNER JOIN
Sales.Customer ON Sales.SalesOrderHeader.CustomerID = Sales.Customer.CustomerID INNER JOIN
Person.Person ON Sales.Customer.PersonID = Person.Person.BusinessEntityID
GO
CREATE view [test].[OrderDetail] (OrderNr,OrderSerialsNr,Price)
as
SELECT [SalesOrderID]
,[ProductID]
,[unitPrice]
FROM [AdventureWorks2008R2].[Sales].[SalesOrderDetail]
where SalesOrderID in (select SalesOrderID
from [AdventureWorks2008R2].[Sales].[SalesOrderDetail]
group by SalesOrderID
having COUNT(SalesOrderID) < 4)
GO
请帮助,因为我不知道在哪里可以找到:。要获取透视表中的数据,克劳斯中的数据应该来自表中的正确数据 你可以从这个查询中得到更多的信息 如果1和2不在表中,它将不会显示为计数和列值
CREATE TABLE #OrderHeader
(ORDERNR INT,
ORDERCONTACT CHAR(5))
CREATE TABLE #ORDERDETAIL
(ORDERNR INT,
ORDERSERIAL VARCHAR(10)
)
INSERT INTO #OrderHeader VALUES ( 1, 'X')
INSERT INTO #ORDERDETAIL VALUES ( 1, 'X1')
INSERT INTO #ORDERDETAIL VALUES ( 1, 'X2')
INSERT INTO #ORDERDETAIL VALUES ( 1, 1)
INSERT INTO #ORDERDETAIL VALUES ( 1, 2)
SELECT * FROM #OrderHeader
SELECT * FROM #ORDERDETAIL
SELECT OrderNr,
OderContact,
[1] as OrderSerial1,
[2] as OrderSerial2,
[3] as OrderSerial3
FROM
(select H.OrderNR as OrderNr,
OrderContact as OderContact,
ORDERSERIAL
from #OrderHeader H inner join #ORDERDETAIL D on H.OrderNr = D.OrderNr
) AS PivSource
PIVOT
(count(ORDERSERIAL) for ORDERSERIAL in([1],[2],[3])) as pvt
DROP TABLE #OrderHeader
DROP TABLE #ORDERDETAIL
请发布两个表中的一些示例数据和所需的输出。好的,这在pivot中是不可能的,除非您知道这些值。谢谢你的建议!我会考虑另一种方法。