SQL表行到列

时间:2015-12-20 08:35:30

标签: sql sql-server

在你说重复的问题之前请检查我的疑问,因为我有一些表,我试图从中获取报告。我在下面发布我的选择声明,

SELECT JobDetails.JobCode,JobDetails.ReceiptDate,JobDetails.DeliveryDate,JobDetails.CompletionDate,JobDetails.BranchName,RepairDetails.Repair_Remarks,JobDetails.FinalRemarks,
       JobDetails.JobCommentCSR,JobDetails.BrandName, JobDetails.ModelName,JobDetails.IMEICode,JobDetails.SerialNo,CustomerDTL.CustomerName,CustomerDTL.MobileNumber,JobDetails.WarrantyType,
       RepairDetails.Tech_Name,RepairDetails.Device_Condition,RepairDetails.Levels,

       ItemMaster.ItemName,ItemMaster.ItemCode,PartsIssueDetails.SparePrice
From JobDetails
Right Join CustomerDTL On
     JobDetails.JobCode=CustomerDTL.JobCode
Right Join RepairDetails On
     JobDetails.JobCode=RepairDetails.JobCode
Right Join PartsIssueDetails On
     JobDetails.JobCode=PartsIssueDetails.JobCode
Right Join ItemMaster On
     PartsIssueDetails.ItemName=ItemMaster.ItemCode
Where 
(JobDetails.CompletionDate Between @Date1 and @Date2) AND JobDetails.BrandName=@Brand
)  

我的结果是

╔═══════════╦═════════════╦══════════════╦════════════════╦════════════╦════════════════════════════════════════════════════════╦═══════════════════════════════╦═══════════════════════════════════════════════════════════╦═══════════╦══════════════╦══════════╦══════════╦══════════════╦══════════════╦══════════════╦═════════════════════╦═════════════════════╦═════════════════════════════════════════════════════╦════════════════════════════════════╦══════════════════╦════════════╗
║ JobCode   ║ ReceiptDate ║ DeliveryDate ║ CompletionDate ║ BranchName ║ Repair_Remarks                                         ║ FinalRemarks                  ║ JobCommentCSR                                             ║ BrandName ║ ModelName    ║ IMEICode ║ SerialNo ║ CustomerName ║ MobileNumber ║ WarrantyType ║ Tech_Name           ║ Device_Condition    ║ Levels                                              ║ ItemName                           ║ ItemCode         ║ SparePrice ║ 
╠═══════════╬═════════════╬══════════════╬════════════════╬════════════╬════════════════════════════════════════════════════════╬═══════════════════════════════╬═══════════════════════════════════════════════════════════╬═══════════╬══════════════╬══════════╬══════════╬══════════════╬══════════════╬══════════════╬═════════════════════╬═════════════════════╬═════════════════════════════════════════════════════╬════════════════════════════════════╬══════════════════╬════════════╣
║ 201507501 ║ 15-Jul-15   ║ 30-Aug-15    ║ 23-Aug-15      ║ xxx        ║ need replace lcd approved 75                           ║ replace lcd approved 75       ║ Screen broken need full check up                          ║ xx        ║ ST3-GO-77    ║ aaaa     ║ aaa      ║ 1111         ║ N            ║ zzz          ║ HW Part Discoloured ║ Level 2             ║ LCD ST3-GO-77 (Tab3-GO)                             ║ 26-05012-0003201                   ║ 75               ║            ║
║ 201507501 ║ 15-Jul-15   ║ 30-Aug-15    ║ 23-Aug-15      ║ xxx        ║ need replace lcd approved 75                           ║ replace lcd approved 75       ║ Screen broken need full check up                          ║ xx        ║ ST3-GO-77    ║ aaaa     ║ aaa      ║ 111          ║ N            ║ zzz          ║ HW Part Discoloured ║ Level 2             ║ Touch ST3-GO-77 (Tab3-GO)                           ║ 26-05012-0003201                   ║ 0                ║            ║
║ 201508667 ║ 5-Aug-15    ║ 17-Aug-15    ║ 16-Aug-15      ║ xxx        ║ NEED RE-ASSEMBLE AND SOFTWARE                          ║ RE-ASSEMBLE AND SOFTWARE      ║ Unit not charging                                         ║ xx        ║ SSR2-1-50-5M ║ xxxxxxx  ║ aaaa     ║ bbb          ║ 11111        ║ Y            ║ aaa                 ║ HW Part Discoloured ║ Level 2                                             ║ Service Level 2                    ║ Level L2         ║ 73.5       ║
║ 201508668 ║ 5-Aug-15    ║ 8-Aug-15     ║ 5-Aug-15       ║ xxx        ║ NEED REPLACE RECIEVER AND SOFTWARE                     ║ REPLACE RECEIVER AND SOFTWARE ║ Calling problem,Sound Speaker not good need full check up ║ xxx       ║ SSR1-5-8M    ║ xxxxxxx  ║ aaaa     ║ ccc          ║ 111          ║ Y            ║ zzz                 ║ HW Part Dirty       ║ Level 2                                             ║ RECEIVER 0.01W KINGSTATE SSR1-5-8M ║ 29S02-106B0-SH0S ║ 2.78       ║ 
║ 201508668 ║ 5-Aug-15    ║ 8-Aug-15     ║ 5-Aug-15       ║ xxx        ║ NEED REPLACE RECIEVER AND SOFTWARE                     ║ REPLACE RECEIVER AND SOFTWARE ║ Calling problem,Sound Speaker not good need full check up ║ xx        ║ SSR1-5-8M    ║ xxxxxxx  ║ aaaa     ║ ccc          ║ 111          ║ Y            ║ zzz                 ║ HW Part Dirty       ║ Level 2                                             ║ Service Level 2                    ║ SICO L2          ║ 73.5       ║
║ 201508671 ║ 5-Aug-15    ║ 23-Aug-15    ║ 9-Aug-15       ║ xxx        ║ NEED REPLACE LCD APPROVED 185 REPLACE LCD Approved 185 ║ Lcd Broken need full check up ║ xx                                                        ║ SSR1-5-8M ║ xxxxxxx      ║ aaaa     ║ Madu     ║ 111          ║ N            ║ zzz          ║ HW Part Discoloured ║ Level 2             ║ 5" TOUCH PANEL AND LCM MODULE (LAMINATED) SSR1-5-8M ║ 29C10-052A0-L00R                   ║ 185              ║            ║
╚═══════════╩═════════════╩══════════════╩════════════════╩════════════╩════════════════════════════════════════════════════════╩═══════════════════════════════╩═══════════════════════════════════════════════════════════╩═══════════╩══════════════╩══════════╩══════════╩══════════════╩══════════════╩══════════════╩═════════════════════╩═════════════════════╩═════════════════════════════════════════════════════╩════════════════════════════════════╩══════════════════╩════════════╝

由于零件的原因,您可以多次看到这份工作代码。我如何得到如下结果。

╔═══════════╦═════════════╦══════════════╦════════════════╦════════════╦════════════════════════════════════╦═══════════════════════════════╦═══════════════════════════════════════════════════════════╦═══════════╦══════════════╦══════════╦══════════╦══════════════╦══════════════╦══════════════╦═════════════════════╦═════════════════════╦═════════════════════════╦═════════════════════════════════════════════════════╦══════════════════╦═══════════════════════════╦═════════════════════════════════════════════════════╦══════════════════╦════════════╗
║ JobCode   ║ ReceiptDate ║ DeliveryDate ║ CompletionDate ║ BranchName ║ Repair_Remarks                     ║ FinalRemarks                  ║ JobCommentCSR                                             ║ BrandName ║ ModelName    ║ IMEICode ║ SerialNo ║ CustomerName ║ MobileNumber ║ WarrantyType ║ Tech_Name           ║ Device_Condition    ║ Levels                  ║ ItemName                                            ║ ItemCode         ║ SparePrice                ║ ItemName                                            ║ ItemCode         ║ SparePrice ║
╠═══════════╬═════════════╬══════════════╬════════════════╬════════════╬════════════════════════════════════╬═══════════════════════════════╬═══════════════════════════════════════════════════════════╬═══════════╬══════════════╬══════════╬══════════╬══════════════╬══════════════╬══════════════╬═════════════════════╬═════════════════════╬═════════════════════════╬═════════════════════════════════════════════════════╬══════════════════╬═══════════════════════════╬═════════════════════════════════════════════════════╬══════════════════╬════════════╣
║ 201507501 ║ 15-Jul-15   ║ 30-Aug-15    ║ 23-Aug-15      ║ xxx        ║ need replace lcd approved 75       ║ replace lcd approved 75       ║ Screen broken need full check up                          ║ xx        ║ ST3-GO-77    ║ aaaa     ║ aaa      ║ 1111         ║ N            ║ zzz          ║ HW Part Discoloured ║ Level 2             ║ LCD ST3-GO-77 (Tab3-GO) ║ 26-05012-0003201                                    ║ 75               ║ Touch ST3-GO-77 (Tab3-GO) ║ 26-05012-0003201                                    ║ 0                ║            ║
║ 201508667 ║ 5-Aug-15    ║ 17-Aug-15    ║ 16-Aug-15      ║ xxx        ║ NEED RE-ASSEMBLE AND SOFTWARE      ║ RE-ASSEMBLE AND SOFTWARE      ║ Unit not charging                                         ║ xx        ║ SSR2-1-50-5M ║ xxxxxxx  ║ aaaa     ║ bbb          ║ 11111        ║ Y            ║ aaa                 ║ HW Part Discoloured ║ Level 2                 ║ Service Level 2                                     ║ Level L2         ║ 73.5                      ║                                                     ║                  ║            ║
║ 201508668 ║ 5-Aug-15    ║ 8-Aug-15     ║ 5-Aug-15       ║ xxx        ║ NEED REPLACE RECIEVER AND SOFTWARE ║ REPLACE RECEIVER AND SOFTWARE ║ Calling problem,Sound Speaker not good need full check up ║ xxx       ║ SSR1-5-8M    ║ xxxxxxx  ║ aaaa     ║ ccc          ║ 111          ║ Y            ║ zzz                 ║ HW Part Dirty       ║ Level 2                 ║ RECEIVER 0.01W KINGSTATE SSR1-5-8M                  ║ 29S02-106B0-SH0S ║ 2.78                      ║ Service Level 2                                     ║ Level L2         ║ 73.5       ║
║ 201508671 ║ 5-Aug-15    ║ 23-Aug-15    ║ 9-Aug-15       ║ xxx        ║ NEED REPLACE LCD APPROVED 185 AED  ║ REPLACE LCD Approved 185      ║ Lcd Broken need full check up                             ║ xx        ║ SSR1-5-8M    ║ xxxxxxx  ║ aaaa     ║ Madu         ║ 111          ║ N            ║ zzz                 ║ HW Part Discoloured ║ Level 2                 ║ 5" TOUCH PANEL AND LCM MODULE (LAMINATED) SSR1-5-8M ║ 29C10-052A0-L00R ║ 185                       ║ 5" TOUCH PANEL AND LCM MODULE (LAMINATED) SSR1-5-8M ║ 29C10-052A0-L00R ║ 185        ║
╚═══════════╩═════════════╩══════════════╩════════════════╩════════════╩════════════════════════════════════╩═══════════════════════════════╩═══════════════════════════════════════════════════════════╩═══════════╩══════════════╩══════════╩══════════╩══════════════╩══════════════╩══════════════╩═════════════════════╩═════════════════════╩═════════════════════════╩═════════════════════════════════════════════════════╩══════════════════╩═══════════════════════════╩═════════════════════════════════════════════════════╩══════════════════╩════════════╝

帮我解决这个问题......这项工作的最大部分是4.

1 个答案:

答案 0 :(得分:0)

您可能需要从PartsIssueDetails和ItemMaster创建一个CTE或派生表,为每个JobCode返回一行。您可以使用case语句和row_number更容易地进行数据透视,具体如下:

select
  PID.JobCode,
  max(case when RN = 1 then IM.ItemName end) as ItemName1,
  max(case when RN = 1 then IM.ItemCode end) as ItemCode1,
  max(case when RN = 1 then PID.SparePrice end) as SparePrice1,
  max(case when RN = 2 then IM.ItemName end) as ItemName2,
  max(case when RN = 2 then IM.ItemCode end) as ItemCode2,
  max(case when RN = 2 then PID.SparePrice end) as SparePrice2,
  ...
from (
  select
    PID.JobCode,
    IM.ItemName,
    IM.ItemCode,
    PID.SparePrice,
    row_number() over (partition by PID.JobCode order by IM.ItemName) as RN
  from
    PartsIssueDetails PID
    left outer join ItemMaster IM On PID.ItemName=IM.ItemCode
) X
group by PID.JobCode

这只是猜测,因为您没有提供任何示例数据或表结构。

我还假设您需要使用左外连接而不是右连接,这对我来说更有意义。