2

This is table 'VendorItemPricing'.

ItemID  VendorName     VendorPrice    
122     HP             215.13
122     IBM            264.41
122     Microsoft      257.65

I used this query to get make rows as columns.

Select ItemID,
[HP] As HPPrice ,
[Apple] As ApplePrice,
[Microsoft] As MicrosoftPrice,
[IBM] As IBMPrice from (
select ItemID,VendorName,VendorPrice from VendorItemPricing where ItemID = 122)A
PIVOT(MAX(VendorPrice) FOR VendorName IN ([HP],[Apple],Microsoft,IBM))P

And this's the output as I expected.

ItemID  HPPrice  ApplePrice  MicrosoftPrice  IBMPrice
122     215.13   NULL        257.65          264.41

This is my table 'MasterItems', and i used this query to get below results.

select ItemID, ItemPartNumber, ItemDescription, CreatedDate, InitialPrice from MasterItems where ItemID = 122

This's the result probably.

ItemID  ItemPartNumber  ItemDescription  CreatedDate                InitialPrice
122     AB246VB         Volt Fuser Kit   2015-05-15 17:17:32.940    215.14

Is it possible to join both results and get results like below?

ItemID  ItemPartNumber  ItemDescription  CreatedDate                InitialPrice    HPPrice    ApplePrice   MicrosoftPrice   IBMPrice
122     AB246VB         Volt Fuser Kit   2015-05-15 17:17:32.940    215.14          215.13     NULL         257.65           264.41
good-to-know
  • 742
  • 3
  • 15
  • 32

3 Answers3

2

You can simply perform a join in the source table of the PIVOT:

Select ItemID, ItemPartNumber, ItemDescription, CreatedDate, InitialPrice,
       [HP] As HPPrice, 
       [Apple] As ApplePrice, 
       [Microsoft] As MicrosoftPrice,
       [IBM] As IBMPrice 
from (
   select v.ItemID, VendorName, VendorPrice, 
          ItemPartNumber, ItemDescription, CreatedDate, InitialPrice
   from VendorItemPricing as v 
   left join MasterItems as m on v.ItemID = m.ItemID
   where v.ItemID = 122)A
PIVOT(
   MAX(VendorPrice) 
   FOR VendorName IN ([HP],[Apple],Microsoft,IBM)
)P

SQL Fiddle Demo

Giorgos Betsos
  • 71,379
  • 9
  • 63
  • 98
2

Assuming with sample data as you said master table joining with pivot set result using CTE

declare  @table  table (Itemid Int,Vendorname varchar(10),VendorPrice DECIMAL(18,2))
insert into @table (Itemid,Vendorname,VendorPrice)
values (122,'HP',125.66),
(122,'microsoft',134.00),
(122,'IBM',124.90)

Declare @master table (Itemid int,Partnumber Varchar(10),Description varchar(20),Created datetime,InitialPrice decimal(18,2))
insert into @master (Itemid,Partnumber,Description,Created,InitialPrice)values (122,'AB246VB','Volt Fuser Kit',GETDATE(),215.14)

;with cte as (
Select Itemid,[HP] As HPPrice ,
[Apple] As ApplePrice,
[microsoft] As microsoftPrice,
[IBM] As IBMPrice from (
select Itemid,Vendorname,VendorPrice from @table where ItemID = 122)A
PIVOT(MAX(VendorPrice) FOR Vendorname IN ([HP],[Apple],[microsoft],[IBM]))P)
select t.Itemid,
t.Partnumber,
t.Description,
t.Created,
t.InitialPrice,
c.HPPrice,c.ApplePrice,
c.IBMPrice,
c.microsoftPrice from  @master t,cte c where t.ItemID = 122
good-to-know
  • 742
  • 3
  • 15
  • 32
mohan111
  • 8,633
  • 4
  • 28
  • 55
2
SELECT M.*, [HP] As HPPrice, 
       [Apple] As ApplePrice, 
       [Microsoft] As MicrosoftPrice,
       [IBM] As IBMPrice
FROM MasterItems M
JOIN (
    select ItemID,VendorName,VendorPrice from VendorItemPricing where ItemID = 122
)A
PIVOT(MAX(VendorPrice) FOR VendorName IN ([HP],[Apple],Microsoft,IBM)) P
ON M.ItemId = P.ItemId

You may adjust JOIN to LEFT JOIN based on your requirement.

good-to-know
  • 742
  • 3
  • 15
  • 32
qxg
  • 6,955
  • 1
  • 28
  • 36