Solved

SQL - select

Posted on 2015-02-23
3
53 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 46

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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
how to install/upgrade the Blitz responder kit 8 27
sql Total query 2 17
When should I use a controller? 3 26
Sql Query 4 19
In this article I will describe the Detach & Attach 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.
How to leverage one TLS certificate to encrypt Microsoft SQL traffic and Remote Desktop Services, versus creating multiple tickets for the same server.
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
Internet Business Fax to Email Made Easy - With  eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, f…

861 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

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now