Search code examples
sqlsqliteunpivot

Unpivot with column name help needed


I have 3 table

1.User
2.Item
3.Data

Table Schema:

1.CREATE TABLE User (
'UserID'    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
'UserName'  TEXT NOT NULL,
'TINNUMBER' TEXT)
2.CREATE TABLE ITEM(
 'ItemNo' INTEGER NOT NULL,
 'InvNumber' INTEGER not null
 'ITEMID' TEXT,
 'ItemName'TEXT,
  'Tax1'    INTEGER,
  'Tax2'    INTEGER,
  'Tax3'    INTEGER,
  'Tax4'    INTEGER,)
3.CREATE TABLE DATA(
'InvNumber' INTEGER not null
   'UserID' INTEGER,
   'UserName'   TEXT,
   'TotalAmount'    NUMERIC      
)

select P.TINNUMBER
      ,SI.InvNumber
      ,SI.TotalAmount
      ,SII.ItemName
      ,SII.Tax1
      ,SII.Tax2
      ,SII.Tax3
      ,SII.Tax4 
from SalesInvoices SI 
Inner Join user P ON SI.UserID=P.UserID 
Left Outer Join Item SII on SI.InvNumber=SII.InvNumber

I have joined 3 tables but I want the tax1,tax2,tax3 and tax4 data to be displayed in rows with other column data as sam. need help thanks in advance

'<table><tr><th>TINNumber</th><th>InvNumber</th><th>TotalAmount</th><th>ItemName</th><th>Tax1</th></tr>
<tr><th>TINNumber</th><th>InvNumber</th><th>TotalAmount</th>
<th>ItemName</th><th>Tax2</th></tr>
<tr><th>TINNumber</th><th>InvNumber</th><th>TotalAmount</th>
<th>ItemName</th><th>Tax3</th></tr>
<tr><th>TINNumber</th><th>InvNumber</th><th>TotalAmount</th>
<th>ItemName</th><th>Tax4</th></tr></table>'

Solution

  • Unpivot it using UNION ALL. Unfortunately, Sqlite has nor pivot/unpivot shortcuts. Try

    select P.TINNUMBER
          ,SI.InvNumber
          ,SI.TotalAmount
          ,SII.ItemName
          ,SII.Tax
    from SalesInvoices SI 
    Inner Join user P ON SI.UserID=P.UserID 
    Left Outer Join (
      Select InvNumber, ItemName, Tax1 as Tax
      From Item
      Union All
      Select InvNumber, ItemName, Tax2 as Tax
      From Item
      Union All
      Select InvNumber, ItemName, Tax3 as Tax
      From Item
      Union All
      Select InvNumber, ItemName, Tax4 as Tax
      From Item
     ) SII on SI.InvNumber=SII.InvNumber