Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion Groups
DB Engine
SQL ServerMSDESQL Server CE
Services
Analysis (Data Mining)Analysis (OLAP)DTSIntegration ServicesNotification ServicesReporting Services
Programming
CLRConnectivitySQLXML
Other Technologies
ClusteringEnglish QueryFull-Text SearchReplicationService Broker
General
Data WarehousingPerformanceSecuritySetupSQL Server ToolsOther SQL Server Topics
DirectoryUser Groups
Related Topics
MS AccessOther DB ProductsMS Server Products.NET DevelopmentVB DevelopmentJava DevelopmentMore Topics ...

SQL Server Forum / General / Other SQL Server Topics / June 2007

Tip: Looking for answers? Try searching our database.

question about a query

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
nina297 - 28 Jun 2007 20:44 GMT
I've written this query:

select distinct topics, questions, answer
from topics AS A, QuesNans AS B
where A.topicid = B.topicid
order by a.topics

The results are:
Topic              Questions            Answers
Topic Four        Question 1    Answer to question 1
Topic One        Quesstion 2    Answer to question 2
Topic One        Question 1    Answer to question 1
Topic Three     Question 1    Answer to question 1
Topic Two        Question 2    Answer to question 2

How do I get one topic listed but all of the questions that go with
that topic?
Roy Harvey - 28 Jun 2007 21:27 GMT
n Thu, 28 Jun 2007 12:44:17 -0700, nina297 <nina.childress@ssa.gov>
wrote:

>I've written this query:
>
[quoted text clipped - 13 lines]
>How do I get one topic listed but all of the questions that go with
>that topic?

With a WHERE clause test?  Or perhaps I do not understand the
question.

SELECT topic, question, answer
 FROM Topics AS A
 JOIN QuesNans AS B
   ON A.topicid = B.topicid
WHERE A.topic = 'Topic One'
ORDER BY a.topic

By the way, it is common to make table names plural, and column names
singular.  And it is much preferred to use the SQL-92 join syntax and
leave the WHERE clause for the rest tests to include/exclude rows (at
least in so far as they do not break OUTER joins.)

Roy Harvey
Beacon Falls, CT
Erland Sommarskog - 28 Jun 2007 21:32 GMT
> I've written this query:
>
[quoted text clipped - 13 lines]
> How do I get one topic listed but all of the questions that go with
> that topic?

So you get something like:

  Topic       Q1      A1    Q2   A2  ....
  T Four      Quest1  Ans1  
  T One       Quest1  Ans2  Quest2 Ans2
  ....

If you know the maximum number of question per topics, you can do:

  SELECT A.Topic,
         Q1 = MIN (CASE n.n WHEN 1 THEN B.Questions END),
         A1 = MIN (CASE n.n WHEN 1 THEN B.Answers END),
         Q2 = MIN (CASE n.n WHEN 2 THEN B.Questions END),
         A2 = MIN (CASE n.n WHEN 2 THEN B.Answers END),
         ...
         Q5 = MIN (CASE n WHEN 5 THEN B.Questions END),
         A5 = MIN (CASE n WHEN 5 THEN B.Answers END)
  FROM   Topics AS A
  JOIN   QuesNans AS B ON A.topicid = B.topicid
  CROSS  JOIN (SELECT 1 AS n UNION ALL
               SELECT 2 UNION ALL
               SELECT 3 UNION ALL
               SELECT 4 UNION ALL
               SELECT 5) AS n
  GROUP BY A.Topic
   
This is a crosstab query. There are two "tricks". The first is the
derived table that generates the numbers 1 to 5. This is a query within
the query, which is a very useful technique, because the optimizer is
very good at recasting computation order for better performance. The
other is the MIN(CASE. The MIN here serves to get all one row, but the
MIN only sees one value. In fact MAX would work just as well.

If you cannot assume the maxmim number of questions per topic, you
need to build the query dynamically, which is quite an increase in
complexity. The third party tool RAC, at www4sql.rac.net is popular
for this.

Signature

Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinfo/previousversions/books.mspx

nina297 - 29 Jun 2007 14:00 GMT
> > I've written this query:
>
[quoted text clipped - 59 lines]
>
> - Show quoted text -

Thanks so much for your help.  I will try both options.
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.