Solved

SQL - select

Posted on 2015-02-23
3
55 Views
Last Modified: 2015-03-09
I want to list all productname for each column. A list of productname is on table2. There are about 50 of them.
Instead of using case (50 times or more) like below, is there a better way of query it?


select

tb1.producttype,
case productname when "productname1" then tbl2.shipped * quantity as productname1 else 0 end) productname1,
case productname when "productname2" then tbl2.shipped * quantity as productname1 else 0 end) productname2,
case productname when "productname3" then tbl2.shipped * quantity as productname1 else 0 end) productname3,
...
case productname = "productname50" then tbl2.shipped * quantity as productname1 else 0 end) productname50,
tb1.shippedto,
tbl1.Customername


from table1 tb1
inner join table2 tbl2
on tb1.id = tbl2.id
0
Comment
Question by:VBdotnet2005
  • 2
3 Comments
 
LVL 48

Expert Comment

by:PortletPaul
ID: 40627248
You could consider using PIVOT instead of the case expression approach

BUT (in my opinion)

the case expression approach can do stuff rather easily that is very hard to achieve using PIVOT

The very best way of proceeding is for you to supply some "sample data" and an "expected result"

nb:
sample might only be 4 columns, not 50, and just a couple of rows.
a good example of this is shown at the link provided above.
0
 
LVL 48

Expert Comment

by:PortletPaul
ID: 40627258
when pivoting data using SQL, the column names (bold) are "hard coded"

select
tb1.producttype,
case productname when 'ABC123' then tbl2.shipped * quantity else 0 end) ABC123,
case productname when '123XYZ' then tbl2.shipped * quantity else 0 end) 123XYZ,
case productname when 'BLAH17' then tbl2.shipped * quantity else 0 end) BLAH17,
...
case productname = 'ETCETC50' then tbl2.shipped * quantity else 0 end) ETCETC50,

But you could concatenate them into a query from variables using C#
Otherwise you would need "dynamic sql"

This comment is true with the PIVOT operator and/or case expression approaches.
0
 
LVL 48

Accepted Solution

by:
Vitor Montalvão earned 500 total points
ID: 40627960
Why not use a GROUP BY clause?
select 
 tb1.producttype,
productname,
 SUM(tbl2.shipped * quantity),
 tb1.shippedto,
 tbl1.Customername
 from table1 tb1
 inner join table2 tbl2
 on tb1.id = tbl2.id
group by  tb1.producttype, productname

Open in new window

0

Featured Post

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
In this article I will describe the Backup & Restore method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question