Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL pivot按orderNr获取产品_Sql_Sql Server_Pivot_Pivot Table - Fatal编程技术网

SQL pivot按orderNr获取产品

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,

我有两张桌子:

“OrderHeader”包含OrderNr和OrderContact列。 'OrderDetail,包含OrderNr和OrderSerial列。 对于每个ordernr,最多有3个orderserials。 所以,我想得到的是一个包含列的表:

订单号 奥德接触 订单序列1 订单序列2 订单序列3 我现在被我的支点卡住了

    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中是不可能的,除非您知道这些值。谢谢你的建议!我会考虑另一种方法。