Hi,
I have the following SQL
SELECT Table1.Col1, Table3.Col1 AS Expr1,
COUNT(Table1.Col2) AS Col2_No, COUNT(Table1.Col3) AS Col3_No etc,
FROM Table3
INNER JOIN Table2 ON Table3.Col1=Table2.Col1
RIGHT OUTER JOIN Table1 ON Table2.Col2=Table2.Col2
GROUP BY Table1.Col1, Table3.Col1
The output rows have a value in either Table1.Col1 or Table3.Col1 but not
both.
I'd like to combine Table1.Col1 and Table3.Col1 and group by the combined
column in the result but don't know how.
Thanks gratefully 5 6036
Hi
It would help if you posted the DDL (Create Table Statements) , example data
(as insert statements) and expected output. From your description it is not
100% clear how the tables relate or what results you expect.
If the values of Col1 are unique between each table your solution might be:
SELECT Col1, COUNT(Col2) as Col2No, COUNT(Col3) as Col3No
FROM Table1
GROUP BY Col1
UNION
SELECT Col1, COUNT(Col2) as Col2No, COUNT(Col3) as Col3No
FROM Table3
GROUP BY Col1
If not
SELECT IsNULL(T1.Col1,T3.Col1), COUNT(CASE WHEN T1.Col1 IS NULL THEN T1.Col2
ELSE T3.Col2 END ) AS Col2No, COUNT(CASE WHEN T1.Col1 IS NULL THEN T1.Col3
ELSE T3.Col3 END ) AS Col3No
FROM Table1 T1
LEFT JOIN Table3 T3 ON T1.Col2 = T3.Col2
GROUP BY IsNULL(T1.Col1,T3.Col1)
or more probably
SELECT Col1, SUM(Col2No) as Col2No, SUM(Col3No) as Col3No
FROM (
SELECT Col1, COUNT(Col2) as Col2No, COUNT(Col3) as Col3No
FROM Table1
GROUP BY Col1
UNION
SELECT Col1, COUNT(Col2) as Col2No, COUNT(Col3) as Col3No
FROM Table3
GROUP BY Col1 ) A
GROUP BY Col1
John
"JackT" <tu***********@ntlworld.com> wrote in message
news:ov******************@newsfep2-win.server.ntli.net... Hi, I have the following SQL
SELECT Table1.Col1, Table3.Col1 AS Expr1, COUNT(Table1.Col2) AS Col2_No, COUNT(Table1.Col3) AS Col3_No etc, FROM Table3 INNER JOIN Table2 ON Table3.Col1=Table2.Col1 RIGHT OUTER JOIN Table1 ON Table2.Col2=Table2.Col2 GROUP BY Table1.Col1, Table3.Col1
The output rows have a value in either Table1.Col1 or Table3.Col1 but not both. I'd like to combine Table1.Col1 and Table3.Col1 and group by the combined column in the result but don't know how. Thanks gratefully
Thanks John,
I didn't explain too well so I'll detail tables, releationships and what I'm
trying to do. I have managed to reduce & simplify the issue to two tables:-
Targets table which has columns:
target id - key identity autoincrement integer
locationid - integer
Actions table which has columns:
actionid - key identity autoincrement integer
targetid - integer
locationid integer
relationship is Targets RIGHT OUTER JOIN Actions ON Targets.targetid =
Actions.targetid (I want results from all rows in Actions).
I want to count all rows from Actions and group by locationid combined from
both tables.
Targets content:
targetid locationid
1 1
2 1
Actions Content:
actionid targetid locationid
1 NULL 1
2 NULL 2
3 NULL 3
4 1 NULL
5 1 NULL
6 2 NULL
If I use:
SELECT Actions.locationid, Targets.locationid, COUNT(actionid) AS actions
FROM Targets RIGHT JOIN Actions ON Targets.targetid = Actions.target id
GROUP BY Actions.locationid, Targets.locationid
I get:
Actions Actions.locationid Targets.locationid
1 1 NULL
1 2 NULL
1 3 NULL
3 NULL 1
I want to combine both locationid columns in result giving:
Actions locationid
4 1
1 2
1 3
There are more columns than illustrated but if you the above can be cracked,
I'll be away!
Cheers,
Jack
"John Bell" <jb************@hotmail.com> wrote in message
news:3f***********************@news.easynet.co.uk. .. Hi
It would help if you posted the DDL (Create Table Statements) , example
data (as insert statements) and expected output. From your description it is
not 100% clear how the tables relate or what results you expect.
If the values of Col1 are unique between each table your solution might
be: SELECT Col1, COUNT(Col2) as Col2No, COUNT(Col3) as Col3No FROM Table1 GROUP BY Col1 UNION SELECT Col1, COUNT(Col2) as Col2No, COUNT(Col3) as Col3No FROM Table3 GROUP BY Col1
If not
SELECT IsNULL(T1.Col1,T3.Col1), COUNT(CASE WHEN T1.Col1 IS NULL THEN
T1.Col2 ELSE T3.Col2 END ) AS Col2No, COUNT(CASE WHEN T1.Col1 IS NULL THEN T1.Col3 ELSE T3.Col3 END ) AS Col3No FROM Table1 T1 LEFT JOIN Table3 T3 ON T1.Col2 = T3.Col2 GROUP BY IsNULL(T1.Col1,T3.Col1)
or more probably
SELECT Col1, SUM(Col2No) as Col2No, SUM(Col3No) as Col3No FROM ( SELECT Col1, COUNT(Col2) as Col2No, COUNT(Col3) as Col3No FROM Table1 GROUP BY Col1 UNION SELECT Col1, COUNT(Col2) as Col2No, COUNT(Col3) as Col3No FROM Table3 GROUP BY Col1 ) A GROUP BY Col1
John
John,
Thanks for putting me on the right track. With ref to the example in my
reply post I used:
SELECT ISNULL(Actions.locationid, Targets.locationid) AS Location,
COUNT(Actions.actionid) AS Actions_No
FROM Actions LEFT OUTER JOIN
Targets ON Actions.targetid = Targets.targetid
GROUP BY ISNULL(Actions.locationid, Targets.locationid)
All the other columns I want to count are in the Actions table so I just
need to add them to the SELECT statement.
Thanks again,
Jack
"JackT" <tu***********@ntlworld.com> wrote in message
news:Fu*******************@newsfep2-win.server.ntli.net... Thanks John, I didn't explain too well so I'll detail tables, releationships and what
I'm trying to do. I have managed to reduce & simplify the issue to two
tables:- Targets table which has columns: target id - key identity autoincrement integer locationid - integer
Actions table which has columns: actionid - key identity autoincrement integer targetid - integer locationid integer
relationship is Targets RIGHT OUTER JOIN Actions ON Targets.targetid = Actions.targetid (I want results from all rows in Actions).
I want to count all rows from Actions and group by locationid combined
from both tables.
Targets content: targetid locationid 1 1 2 1
Actions Content: actionid targetid locationid 1 NULL 1 2 NULL 2 3 NULL 3 4 1 NULL 5 1 NULL 6 2 NULL
If I use: SELECT Actions.locationid, Targets.locationid, COUNT(actionid) AS actions FROM Targets RIGHT JOIN Actions ON Targets.targetid = Actions.target id GROUP BY Actions.locationid, Targets.locationid
I get: Actions Actions.locationid Targets.locationid 1 1 NULL 1 2 NULL 1 3 NULL 3 NULL 1
I want to combine both locationid columns in result giving: Actions locationid 4 1 1 2 1 3
There are more columns than illustrated but if you the above can be
cracked, I'll be away! Cheers, Jack
Hi
It sounds like it worked then!
Here is usable DDL and example data in case you need it again.
create table Targets (
targetid integer NOT NULL identity (1,1) CONSTRAINT PK_Targets PRIMARY KEY,
locationid integer,
)
create table Actions (
actionid integer NOT NULL identity (1,1) CONSTRAINT PK_Actions PRIMARY KEY,
targetid integer NULL,
locationid integer,
CONSTRAINT FK_Actions FOREIGN KEY (TargetId) REFERENCES Targets(TargetId)
)
INSERT INTO Targets (locationid) VALUES (1)
INSERT INTO Targets (locationid) VALUES (1)
INSERT INTO Actions (targetid, locationid) VALUES (NULL,1)
INSERT INTO Actions (targetid, locationid) VALUES (NULL,2)
INSERT INTO Actions (targetid, locationid) VALUES (NULL,3)
INSERT INTO Actions (targetid, locationid) VALUES (1,NULL)
INSERT INTO Actions (targetid, locationid) VALUES (1,NULL)
INSERT INTO Actions (targetid, locationid) VALUES (2,NULL)
SELECT * FROM Targets
/*
targetid locationid
----------- -----------
1 1
2 1
(2 row(s) affected)
*/
SELECT * FROM Actions
/*
actionid targetid locationid
----------- ----------- -----------
1 NULL 1
2 NULL 2
3 NULL 3
4 1 NULL
5 1 NULL
6 2 NULL
(6 row(s) affected)
*/
-- Your attempt
SELECT A.locationid, T.locationid, COUNT(A.actionid) AS actions
FROM Targets T RIGHT JOIN Actions A ON T.targetid = A.targetid
GROUP BY A.locationid, T.locationid
/*
locationid locationid actions
----------- ----------- -----------
1 NULL 1
2 NULL 1
3 NULL 1
NULL 1 3
(4 row(s) affected)
*/
-- Your second attempt
SELECT ISNULL(A.locationid, T.locationid) AS Location,
COUNT(A.actionid) AS Actions_No
FROM Actions A LEFT OUTER JOIN Targets T ON A.targetid = T.targetid
GROUP BY ISNULL(A.locationid, T.locationid)
/* Gives
Location Actions_No
----------- -----------
1 4
2 1
3 1
(3 row(s) affected)
*/
John
"JackT" <tu***********@ntlworld.com> wrote in message
news:49*******************@newsfep2-win.server.ntli.net... John,
Thanks for putting me on the right track. With ref to the example in my reply post I used:
SELECT ISNULL(Actions.locationid, Targets.locationid) AS Location, COUNT(Actions.actionid) AS Actions_No FROM Actions LEFT OUTER JOIN Targets ON Actions.targetid = Targets.targetid GROUP BY ISNULL(Actions.locationid, Targets.locationid)
All the other columns I want to count are in the Actions table so I just need to add them to the SELECT statement. Thanks again, Jack
"JackT" <tu***********@ntlworld.com> wrote in message news:Fu*******************@newsfep2-win.server.ntli.net... Thanks John, I didn't explain too well so I'll detail tables, releationships and what I'm trying to do. I have managed to reduce & simplify the issue to two tables:- Targets table which has columns: target id - key identity autoincrement integer locationid - integer
Actions table which has columns: actionid - key identity autoincrement integer targetid - integer locationid integer
relationship is Targets RIGHT OUTER JOIN Actions ON Targets.targetid = Actions.targetid (I want results from all rows in Actions).
I want to count all rows from Actions and group by locationid combined
from both tables.
Targets content: targetid locationid 1 1 2 1
Actions Content: actionid targetid locationid 1 NULL 1 2 NULL 2 3 NULL 3 4 1 NULL 5 1 NULL 6 2 NULL
If I use: SELECT Actions.locationid, Targets.locationid, COUNT(actionid) AS
actions FROM Targets RIGHT JOIN Actions ON Targets.targetid = Actions.target id GROUP BY Actions.locationid, Targets.locationid
I get: Actions Actions.locationid Targets.locationid 1 1 NULL 1 2 NULL 1 3 NULL 3 NULL 1
I want to combine both locationid columns in result giving: Actions locationid 4 1 1 2 1 3
There are more columns than illustrated but if you the above can be cracked, I'll be away! Cheers, Jack
Thanks John,
Appreciate your informative close-out post and will certainly file for
reference.
Cheers,
Jack
"John Bell" <jb************@hotmail.com> wrote in message
news:3f***********************@news.easynet.co.uk. .. Hi
It sounds like it worked then!
Here is usable DDL and example data in case you need it again.
create table Targets ( targetid integer NOT NULL identity (1,1) CONSTRAINT PK_Targets PRIMARY
KEY, locationid integer, )
create table Actions ( actionid integer NOT NULL identity (1,1) CONSTRAINT PK_Actions PRIMARY
KEY, targetid integer NULL, locationid integer, CONSTRAINT FK_Actions FOREIGN KEY (TargetId) REFERENCES Targets(TargetId) )
INSERT INTO Targets (locationid) VALUES (1) INSERT INTO Targets (locationid) VALUES (1)
INSERT INTO Actions (targetid, locationid) VALUES (NULL,1) INSERT INTO Actions (targetid, locationid) VALUES (NULL,2) INSERT INTO Actions (targetid, locationid) VALUES (NULL,3) INSERT INTO Actions (targetid, locationid) VALUES (1,NULL) INSERT INTO Actions (targetid, locationid) VALUES (1,NULL) INSERT INTO Actions (targetid, locationid) VALUES (2,NULL)
SELECT * FROM Targets
/* targetid locationid ----------- ----------- 1 1 2 1
(2 row(s) affected) */ SELECT * FROM Actions
/* actionid targetid locationid ----------- ----------- ----------- 1 NULL 1 2 NULL 2 3 NULL 3 4 1 NULL 5 1 NULL 6 2 NULL
(6 row(s) affected) */
-- Your attempt SELECT A.locationid, T.locationid, COUNT(A.actionid) AS actions FROM Targets T RIGHT JOIN Actions A ON T.targetid = A.targetid GROUP BY A.locationid, T.locationid
/* locationid locationid actions ----------- ----------- ----------- 1 NULL 1 2 NULL 1 3 NULL 1 NULL 1 3
(4 row(s) affected) */
-- Your second attempt SELECT ISNULL(A.locationid, T.locationid) AS Location, COUNT(A.actionid) AS Actions_No FROM Actions A LEFT OUTER JOIN Targets T ON A.targetid = T.targetid GROUP BY ISNULL(A.locationid, T.locationid)
/* Gives Location Actions_No ----------- ----------- 1 4 2 1 3 1
(3 row(s) affected) */
John This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Ilan |
last post by:
Hi all
I need to add data from two Excel sheets (both on the same workbook)
to an existing table in my SQL DB.
The problem is that each sheet holds different fields for the same
record, though...
|
by: Alan Little |
last post by:
Viewed in IE, this page is exactly what I'm trying to do:
http://www.holotech.net/links/
Header, two fixed-width columns, and a footer. However, in NS and Opera,
the second column slides to...
|
by: M.Stanley |
last post by:
Hi,
I'm attempting to create a query that will combine 2 columns of
numbers into one. The followng comes from 1 table with 4 fields
(A,B,C,D)
A B RESULT
700 000 700000
700 001 ...
|
by: strauss.sean |
last post by:
To all:
Here's an interesting one: I have a query that produces 56 (!!) columns
of data. The first three columns are "to repeat at left", as can be
selected in Excel at File --> Page Setup -->...
|
by: Don |
last post by:
I'm thinking this is simple and I'm just not understanding how to do it but
I have to ask because I'm stumped.
I have a query (which is used to create a report) and three of the columns
in this...
|
by: mkopcic |
last post by:
Hi all!
I need help with Visual Basic Application 6.0 and Excel.
Problem is that I need group some columns in Excel by Macro in VBA.
Columns are not fixed which mean that every time when a program...
|
by: J055 |
last post by:
Hi
I need to search a number of DataTables within a DataSet (with some
relationships) and then display the filtered results in a GridView. The
Columns that need to be displayed come from 2 of...
|
by: Ken Fine |
last post by:
This is a question that someone familiar with ASP.NET and ADO.NET DataSets
and DataTables should be able to answer fairly easily. The basic question is
how I can efficiently match data from one...
|
by: MrArjP |
last post by:
So far, I have been researching and Microsoft.Office.Excel namespace is used alot, unfortunately with my work I have been ordered to use infragistics and so far I have had no luck with finding any...
|
by: ryjfgjl |
last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
| |