Solved

SQL - select

Posted on 2015-02-23
3
54 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 47

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

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

831 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