Click here to Skip to main content
15,897,891 members
Home / Discussions / Database
   

Database

 
AnswerRe: Help on SQL Crosstab query (VERY SLOW) Pin
DQNOK12-Apr-07 9:58
professionalDQNOK12-Apr-07 9:58 
GeneralRe: Help on SQL Crosstab query (VERY SLOW) [modified] Pin
Chandman12-Apr-07 12:19
Chandman12-Apr-07 12:19 
GeneralRe: Help on SQL Crosstab query (VERY SLOW) Pin
DQNOK12-Apr-07 12:30
professionalDQNOK12-Apr-07 12:30 
GeneralRe: Help on SQL Crosstab query (VERY SLOW) Pin
Chandman12-Apr-07 13:22
Chandman12-Apr-07 13:22 
GeneralRe: Help on SQL Crosstab query (VERY SLOW) Pin
Pete O'Hanlon13-Apr-07 1:45
mvePete O'Hanlon13-Apr-07 1:45 
GeneralRe: Help on SQL Crosstab query (VERY SLOW) Pin
Chandman13-Apr-07 8:18
Chandman13-Apr-07 8:18 
GeneralRe: Help on SQL Crosstab query (VERY SLOW) Pin
Pete O'Hanlon13-Apr-07 9:58
mvePete O'Hanlon13-Apr-07 9:58 
GeneralRe: Help on SQL Crosstab query (VERY SLOW) [modified] Pin
DQNOK13-Apr-07 7:13
professionalDQNOK13-Apr-07 7:13 
I don't know if you could tolerate this in your app, but I rearranged the tables somewhat to reduce it to only 3 tables:

CREATE TABLE Cars (
CarID INTEGER IDENTITY PRIMARY KEY
, Make VARCHAR(20)
, Model INTEGER
, BodyType VARCHAR(20)
, Country VARCHAR(20)
);
INSERT INTO Cars(Make,Model)
VALUES('Camry',2000);
INSERT INTO Cars(Make,Model)
VALUES('Avalon',2000);
INSERT INTO Cars(Make,Model)
VALUES('Camry',2001);
INSERT INTO Cars(Make,Model)
VALUES('Avalon',2001);
INSERT INTO Cars(Make,Model)
VALUES('Camry',2002);
INSERT INTO Cars(Make,Model)
VALUES('Avalon',2002);
INSERT INTO Cars(Make,Model)
VALUES('Camry',2003);
INSERT INTO Cars(Make,Model)
VALUES('Avalon',2003);
INSERT INTO Cars(Make,Model)
VALUES('Camry',2004);
INSERT INTO Cars(Make,Model)
VALUES('Avalon',2004);
INSERT INTO Cars(Make,Model)
VALUES('Camry',2005);
INSERT INTO Cars(Make,Model)
VALUES('Avalon',2005);

CREATE TABLE TestTypes (
TestTypeID INTEGER IDENTITY PRIMARY KEY
, Name VARCHAR(50)
, Description VARCHAR(255)
, Measures VARCHAR(50)
, Units VARCHAR(20) --results are what? HorsePower, Seconds, ...
);
INSERT INTO TestTypes(Name,Description,Measures,Units)
VALUES('Engine Test/Efficiency', 'etc.', 'Fuel Efficiency', 'kg/hr');
INSERT INTO TestTypes(Name,Description,Measures,Units)
VALUES('Engine Test/Power', 'etc.', 'go-fast ability', 'hp');
INSERT INTO TestTypes(Name,Description,Measures,Units)
VALUES('Handling/Slolam', 'standard slolam setup', 'min time', 'seconds');
INSERT INTO TestTypes(Name,Description,Measures,Units)
VALUES('Quarter Mile', 'etc.', 'min time', 'seconds');

CREATE TABLE Tests (
TestID INTEGER IDENTITY PRIMARY KEY
, TestTypeID INTEGER
, CarID INTEGER
, YearRun INTEGER
, TrialNumber INTEGER
, Result SINGLE
);

Then I entered a bunch of "Quarter Mile" times like this:
INSERT INTO Tests(TestTypeID,CarID,YearRun,TrialNumber,Result)
VALUES( 4 , 1 , 2000 , 1 , 8);
plus too many more to list here...

Then ran the following:

SELECT D.Make AS Make
, (SELECT AVG(Result) FROM Tests WHERE CarID=D.ID2000 AND TestTypeID=4) AS 2000
, (SELECT AVG(Result) FROM Tests WHERE CarID=D.ID2001 AND TestTypeID=4) AS 2001
, (SELECT AVG(Result) FROM Tests WHERE CarID=D.ID2002 AND TestTypeID=4) AS 2002
, (SELECT AVG(Result) FROM Tests WHERE CarID=D.ID2003 AND TestTypeID=4) AS 2003
, (SELECT AVG(Result) FROM Tests WHERE CarID=D.ID2004 AND TestTypeID=4) AS 2004
FROM (SELECT DISTINCT C.Make
, (SELECT CarID FROM Cars WHERE Make=C.Make AND Model=2000) AS ID2000
, (SELECT CarID FROM Cars WHERE Make=C.Make AND Model=2001) AS ID2001
, (SELECT CarID FROM Cars WHERE Make=C.Make AND Model=2002) AS ID2002
, (SELECT CarID FROM Cars WHERE Make=C.Make AND Model=2003) AS ID2003
, (SELECT CarID FROM Cars WHERE Make=C.Make AND Model=2004) AS ID2004
FROM Cars AS C) AS D;

and got this output:
Make 2000 2001 2002 2003 2004
Avalon 9.5 11.5 13.5 9.5 11.5
Camry 8.5 10.5 12.5 8.5 10.5

This has no joins, and *I think* would run very fast since it's not re-looping over and over.

You could dump your existing data into the table structure I've described with some SELECT statements. You could also replace the hard-coded "AND TestTypeID=4" with "AND TestTypeID=@testIDnum" to get summaries of all the tests run.

Let me know if this works for you. If you want, I can send you the Tests table insert data I used.

ps:
I also did this query:
SELECT TT.name AS Test_Name, D.Make AS Make
, (SELECT AVG(Result) FROM Tests WHERE CarID=D.ID2000 AND TestTypeID=TT.TestTypeID) AS 2000
, (SELECT AVG(Result) FROM Tests WHERE CarID=D.ID2001 AND TestTypeID=TT.TestTypeID) AS 2001
, (SELECT AVG(Result) FROM Tests WHERE CarID=D.ID2002 AND TestTypeID=TT.TestTypeID) AS 2002
, (SELECT AVG(Result) FROM Tests WHERE CarID=D.ID2003 AND TestTypeID=TT.TestTypeID) AS 2003
, (SELECT AVG(Result) FROM Tests WHERE CarID=D.ID2004 AND TestTypeID=TT.TestTypeID) AS 2004
FROM (SELECT DISTINCT C.Make
, (SELECT CarID FROM Cars WHERE Make=C.Make AND Model=2000) AS ID2000
, (SELECT CarID FROM Cars WHERE Make=C.Make AND Model=2001) AS ID2001
, (SELECT CarID FROM Cars WHERE Make=C.Make AND Model=2002) AS ID2002
, (SELECT CarID FROM Cars WHERE Make=C.Make AND Model=2003) AS ID2003
, (SELECT CarID FROM Cars WHERE Make=C.Make AND Model=2004) AS ID2004
FROM Cars AS C) AS D, TestTypes AS TT
ORDER BY TT.name;

and got this result:
Test_Name Make 2000 2001 2002 2003 2004
Engine Test/Efficiency Camry
Engine Test/Efficiency Avalon
Engine Test/Power Camry
Engine Test/Power Avalon
Handling/Slolam Camry
Handling/Slolam Avalon
Quarter Mile Camry 8.5 10.5 12.5 8.5 10.5
Quarter Mile Avalon 9.5 11.5 13.5 9.5 11.5

the formatting looks all screwed up here because CodeProject removes all the spaces.

-- modified at 13:42 Friday 13th April, 2007
GeneralRe: Help on SQL Crosstab query (VERY SLOW) Pin
Chandman13-Apr-07 8:10
Chandman13-Apr-07 8:10 
GeneralRe: Help on SQL Crosstab query (VERY SLOW) Pin
DQNOK13-Apr-07 8:30
professionalDQNOK13-Apr-07 8:30 
GeneralRe: Help on SQL Crosstab query (VERY SLOW) [modified] Pin
Chandman13-Apr-07 10:35
Chandman13-Apr-07 10:35 
Questiongetting data in parts Pin
ArchaBhandare12-Apr-07 2:11
ArchaBhandare12-Apr-07 2:11 
AnswerRe: getting data in parts Pin
Pete O'Hanlon12-Apr-07 2:16
mvePete O'Hanlon12-Apr-07 2:16 
GeneralRe: getting data in parts Pin
Chandman12-Apr-07 6:51
Chandman12-Apr-07 6:51 
GeneralRe: getting data in parts Pin
Pete O'Hanlon12-Apr-07 9:23
mvePete O'Hanlon12-Apr-07 9:23 
AnswerRe: getting data in parts Pin
Elina Blank12-Apr-07 3:58
sitebuilderElina Blank12-Apr-07 3:58 
GeneralRe: getting data in parts Pin
ArchaBhandare12-Apr-07 18:47
ArchaBhandare12-Apr-07 18:47 
GeneralRe: getting data in parts Pin
Elina Blank13-Apr-07 3:58
sitebuilderElina Blank13-Apr-07 3:58 
Questioni have problem Pin
Shuaib wasif khan12-Apr-07 0:42
Shuaib wasif khan12-Apr-07 0:42 
AnswerRe: i have problem Pin
Pete O'Hanlon12-Apr-07 1:24
mvePete O'Hanlon12-Apr-07 1:24 
GeneralRe: i have problem Pin
Paul Conrad12-Apr-07 7:09
professionalPaul Conrad12-Apr-07 7:09 
QuestionProblem In Date In sql Query Pin
Tirthadip11-Apr-07 23:43
Tirthadip11-Apr-07 23:43 
AnswerRe: Problem In Date In sql Query Pin
Shuaib wasif khan11-Apr-07 23:47
Shuaib wasif khan11-Apr-07 23:47 
Questionhow to count how many proc resides in database Pin
Shuaib wasif khan11-Apr-07 23:30
Shuaib wasif khan11-Apr-07 23:30 
AnswerRe: how to count how many proc resides in database Pin
gauthee12-Apr-07 0:11
gauthee12-Apr-07 0:11 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.