Sql 单表4列到8列
我在下面有一个5行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
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
如果在同一年内购买了两辆车,这将是不可靠的,因此您可能希望在订购时附上一个日期戳。用您正在使用的数据库标记您的问题。正确设置格式。它很难读。