SQL pivot 按 orderNr 获取产品
Posted
技术标签:
【中文标题】SQL pivot 按 orderNr 获取产品【英文标题】:SQL pivot get products by orderNr 【发布时间】:2013-07-22 08:34:16 【问题描述】:我有 2 张桌子:
'OrderHeader' 包含 OrderNr 和 OrderContact 列。 'OrderDetail 与列 OrderNr 和 OrderSerial。对于每个 ordernr,最多有 3 个 ordererials。 所以,我想要得到的是一个带有列的表格:
订单号 订单联系人 OrderSerial1 OrderSerial2 OrderSerial3我现在被我的支点困住了
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】:要在数据透视表中获取数据,in 子句应该从表中获取正确的数据
你可以从这个查询中得到更多的想法
如果 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
【讨论】:
好的,所以枢轴是不可能的,除非你知道这些值。感谢您的建议!我会寻找另一种方法来做到这一点。以上是关于SQL pivot 按 orderNr 获取产品的主要内容,如果未能解决你的问题,请参考以下文章
sql 获取WooCommerce按产品/邮政ID或产品SKU获取订单ID