Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 单表4列到8列_Sql - Fatal编程技术网

Sql 单表4列到8列

Sql 单表4列到8列,sql,Sql,我在下面有一个5行4列的表,我想要有8列的结果集,在同一个表上尝试了内部联接,但没有得到预期的结果,有没有办法从下面的查询结果集中获得所选的记录 Declare @CustomerData Table (CustomerNum int, VehicleName Char(20), Vehiclepurchaseyear char(4), Vehicleprice char(10)) INSERT INTO @CustomerData(CustomerNum,Vehicle

我在下面有一个5行4列的表,我想要有8列的结果集,在同一个表上尝试了内部联接,但没有得到预期的结果,有没有办法从下面的查询结果集中获得所选的记录

Declare @CustomerData Table (CustomerNum int,
    VehicleName Char(20),
    Vehiclepurchaseyear char(4),
    Vehicleprice char(10))
INSERT INTO @CustomerData(CustomerNum,VehicleName,Vehiclepurchaseyear,Vehicleprice)
VALUES (1000,'Toyoto Camry','2012',' 14500'),
    (1000,'Nissan Ultima','2014','12000'),
    (1500,'Honda Accord','2012','15000'),
    (1500,'Honda Civic','2012','13000'),
    (1800,'Toyoto RAV4','2012','16500')
SELECT X.customerNum as CustomerNum
    ,X.VehicleName as Vehiclename1   
    ,X.Vehiclepurchaseyear as  vehiclepurchaseyear1 
    ,X.Vehicleprice        as  vehicleprice1 
    ,Y.VehicleName as Vehiclename2   
    ,Y.Vehiclepurchaseyear as  vehiclepurchaseyear2
    ,Y.Vehicleprice        as  vehicleprice2
FROM 
    (SELECT CustomerNum,
        VehicleName,
        Vehiclepurchaseyear,
        Vehicleprice
     FROM @Customerdata ) X
INNER JOIN 
    (SELECT CustomerNum,
        VehicleName,
        Vehiclepurchaseyear,
        Vehicleprice
     FROM @CustomerData ) Y
on X.CustomerNum = Y.customernum    
未预期的结果:

1000    Toyoto Camry            2012     14500      Toyoto Camry            2012     14500    
1000    Toyoto Camry            2012     14500      Nissan Ultima           2014    12000     
1000    Nissan Ultima           2014    12000       Toyoto Camry            2012     14500    
1000    Nissan Ultima           2014    12000       Nissan Ultima           2014    12000     
1500    Honda Accord            2012    15000       Honda Accord            2012    15000     
1500    Honda Accord            2012    15000       Honda Civic             2012    13000     
1500    Honda Civic             2012    13000       Honda Accord            2012    15000     
1500    Honda Civic             2012    13000       Honda Civic             2012    13000     
1800    Toyoto RAV4             2012    16500       Toyoto RAV4             2012    16500     
预期结果:

1000    Toyoto Camry            2012     14500      Nissan Ultima           2014    12000
1500    Honda Civic             2012     13000      Honda Accord            2012    15000 
1800    Toyoto RAV4             2012

这将在这个小表格上为您提供所需的结果,但是您应该使每一行都有一个唯一的id,而不是说x.vehiclenamey.vehiclename,您将使用UID

    Declare @CustomerData Table (CustomerNum int,
                                 VehicleName Char(20),
             Vehiclepurchaseyear char(4),
            Vehicleprice char(10))
    INSERT INTO @CustomerData(CustomerNum,VehicleName,Vehiclepurchaseyear,Vehicleprice)
    VALUES (1000,'Toyoto Camry','2012',' 14500'),
           (1000,'Nissan Ultima','2014','12000'),
           (1500,'Honda Accord','2012','15000'),
           (1500,'Honda Civic','2012','13000'),
           (1800,'Toyoto RAV4','2012','16500')

    SELECT X.customerNum as CustomerNum
      ,X.VehicleName as Vehiclename1   
      ,X.Vehiclepurchaseyear as  vehiclepurchaseyear1 
      ,X.Vehicleprice        as  vehicleprice1 
      ,Y.VehicleName as Vehiclename2   
      ,Y.Vehiclepurchaseyear as  vehiclepurchaseyear2
      ,Y.Vehicleprice        as  vehicleprice2
FROM 
(SELECT CustomerNum,VehicleName,Vehiclepurchaseyear,Vehicleprice
from @Customerdata ) X
INNER JOIN 
(SELECT CustomerNum,VehicleName,Vehiclepurchaseyear,Vehicleprice
from @CustomerData ) Y
on X.CustomerNum = Y.customernum
and X.VehicleName<>Y.VehicleName
Declare@CustomerData表(CustomerNum int,
车辆名称字符(20),
车辆采购半焦(4),
车用大米炭(10))
插入@CustomerData(CustomerNum、VehicleName、Vehiclepurchaseyear、Vehicleprice)
价值(1000、“丰田凯美瑞”、“2012”、“14500”),
(1000、“日产Ultima”、“2014”、“12000”),
(1500、‘本田雅阁’、‘2012’、‘15000’),
(1500、“本田思域”、“2012”、“13000”),
(1800、‘丰田章男RAV4’、‘2012’、‘16500’)
选择X.customerNum作为customerNum
,X.车辆名称为车辆名称1
,X.Vehiclepurchaseyear作为vehiclepurchaseyear1
,X.车辆价格作为车辆价格1
,Y.车辆名称为车辆名称2
,Y.Vehiclepurchaseyear作为vehiclepurchaseyear2
,Y.车辆价格作为车辆价格2
从…起
(选择CustomerNum、VehicleName、Vehiclepurchaseyear、Vehicleprice
来自@Customerdata)X
内连接
(选择CustomerNum、VehicleName、Vehiclepurchaseyear、Vehicleprice
来自@CustomerData)Y
在X.CustomerNum=Y.CustomerNum上
和X.VehicleNameY.VehicleName

只是猜测,但这似乎正是你想要的

SELECT  cd.CustomerNum,
       MAX( CASE WHEN Rn = 1 THEN cd.VehicleName END) AS VehicleName1,
       MAX( CASE WHEN Rn = 1 THEN cd.VehiclePurchaseYear  END) AS VehiclePurchaseYear1,
       MAX( CASE WHEN Rn = 1 THEN cd.VehiclePrice END) AS VehiclePrice1,
       MAX( CASE WHEN Rn = 2 THEN cd.VehicleName END) AS VehicleName2,
       MAX( CASE WHEN Rn = 2 THEN cd.VehiclePurchaseYear END) AS VehiclePurchaseYear2,
       MAX( CASE WHEN Rn = 2 THEN cd.VehiclePrice END) AS VehiclePrice2
FROM   ( SELECT *, 
                ROW_NUMBER() OVER (PARTITION BY CustomerNum ORDER BY VehiclePurchaseYear) Rn
        FROM    @Customerdata) cd
GROUP BY cd.CustomerNum
这将按年度对每个客户的购买进行排序,并将第一次结果作为Rn 1,第二次购买作为Rn 2


如果在同一年内购买了两辆车,这将是不可靠的,因此您可能希望在订购时附上一个日期戳。

用您正在使用的数据库标记您的问题。正确设置格式。它很难读。