Solved

Controlling JOIN Hierarchy in SQL2000 without CTE

Posted on 2008-06-23
6
656 Views
Last Modified: 2010-10-05
I am joining on a set of data in SQL2000, and would like to control the hierarchy of which JOIN is used when given a choice of matches.

I can assign a numeric value to the data set, so I only need to JOIN on the lowest/highest number available.

So for example on the below if joining on the middle column with B, I would want to return 250, not another value.

1     A    150
1     B     250
2     A     330
2     B     558
3     A     554
3     B     447
3     C     557
0
Comment
Question by:rickchild
  • 3
  • 2
6 Comments
 
LVL 17

Expert Comment

by:dbaSQL
ID: 21845402
possibly just use MIN or MAX in your select?
0
 
LVL 18

Assisted Solution

by:lludden
lludden earned 50 total points
ID: 21845562
SELECT P1 FROM T1 INNER JOIN (SELECT ColB, MIN(ColC) FROM Table2 GROUP BY ColB) T2 ON T1.ColB = T2.ColB
0
 
LVL 17

Accepted Solution

by:
dbaSQL earned 200 total points
ID: 21845573
i used TOP instead of MIN/MAX.  i'm not sure if this is what you're looking for:

create table test (one int, two char(1), three int)
insert test
select  1,'A',150
union
select 1,'B',250
union
select 2,'A',330
union
select 2,'B',558
union
select 3,'A',554
union
select 3,'B',447
union
select 3,'C',557

select * from test

select TOP 1 a.one,a.two,a.three from test a inner join test b
on a.one = b.one
where a.two = 'b'
group by a.one,a.two,a.three
0
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.

 
LVL 13

Author Comment

by:rickchild
ID: 21863459
lludden: I will try youtr solution now

dbaSQL: Your solutions is fairly similar to mine, but the problem I am having is that I am trying to use this query to join onto another table, and I seem unable to pass in the 'b' from the first table.

I either need to pass in the Code to the WHERE, or be able to work on the hierarchy when I join it to the main table


LEFT JOIN
(
    SELECT TOP 1 * FROM
    (
	SELECT * FROM
	(
		SELECT 1 as Orders, Entity, Code, Description from revenuereporting..tbl_DIMProduct
		WHERE Entity = 'ASL' and Code = L.[Product Name]
		UNION
		SELECT 2 as Orders, Entity, Code, Description from revenuereporting..tbl_DIMProduct
		WHERE Entity = 'Inc' and Code =  L.[Product Name]
	) AS FFFF
    ) as FF
) as F
ON L.[Product Name] = F.Code

Open in new window

0
 
LVL 13

Author Comment

by:rickchild
ID: 21863551
PS.  This will work if I pass in the Code as a variable, but I am in SSRS so struggling to get that to work.
0
 
LVL 13

Author Comment

by:rickchild
ID: 21863912
Think I may have sussed this now using a subquery generated column, rather than joining on a subquery.

The hierarchy just depends on the order of the UNION, which is ok for this case.
select a.*, (
		select top 1 Description FROM
		(
		SELECT Code, Description
		FROM revenuereporting..tbl_DIMProduct
		WHERE Entity = 'ASL' and Code = a.Code
		UNION ALL 
		SELECT Code, Description
		FROM revenuereporting..tbl_DIMProduct
		WHERE Entity = b.Entity and Code = a.Code
		) as Description
	) as Description

Open in new window

0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Using examples as well as descriptions, and references to Books Online, show the documentation available for date manipulation functions and by using a select few of these functions, show how date based data can be manipulated with these functions.
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function

821 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