Get top 1 row value from third table while joining 3 tables mssql
I am new to mssql .here I need to get some data using joins between three tables .
Header join Lines join Images --> Result
Header Table :
Line Table :
For each header record we can have multiple line items .
Images Table :
Each Image will have unique Image or multiple images .Need to get 1 image url from the list of items for the header record.
Result Set :
Query :
SELECT HT.O_ID,
HT.Type,
HT.Total,
IM.Image
FROM HEADER_TABLE HT
JOIN LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN IMAGE_TABLE IT
ON IT.IMAGE = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail'
This query returns multiple rows .But I need one unique row for each Header record.
Can anyone help me to fix .
sql-server sql-server-2012 join stored-procedures
New contributor
add a comment |
I am new to mssql .here I need to get some data using joins between three tables .
Header join Lines join Images --> Result
Header Table :
Line Table :
For each header record we can have multiple line items .
Images Table :
Each Image will have unique Image or multiple images .Need to get 1 image url from the list of items for the header record.
Result Set :
Query :
SELECT HT.O_ID,
HT.Type,
HT.Total,
IM.Image
FROM HEADER_TABLE HT
JOIN LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN IMAGE_TABLE IT
ON IT.IMAGE = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail'
This query returns multiple rows .But I need one unique row for each Header record.
Can anyone help me to fix .
sql-server sql-server-2012 join stored-procedures
New contributor
4
Hi and welcome to DBA.SE! The table create + insert statements could be useful to get an answer faster. (Testing purposes)
– Randi Vertongen
Mar 19 at 13:32
I need one unique row for each Header record. If so you MUST to build a criteria which will say what record from all record pack with the same header must be returned.
– Akina
Mar 19 at 13:32
Can you check and possibly update a couple of things in your question? Your SQL statement as currently written should return no rows; the second join needs to sayon IT.ITEM_ID = LIT.ITEM_ID
. Also, the sample data that you've included doesn't show any duplicates on the ITEM_ID field, so it doesn't look like the query (with the corrected join) would have any duplicates either. Are there actually multiple rows per Item ID in that table?
– Hellion
Mar 19 at 17:34
add a comment |
I am new to mssql .here I need to get some data using joins between three tables .
Header join Lines join Images --> Result
Header Table :
Line Table :
For each header record we can have multiple line items .
Images Table :
Each Image will have unique Image or multiple images .Need to get 1 image url from the list of items for the header record.
Result Set :
Query :
SELECT HT.O_ID,
HT.Type,
HT.Total,
IM.Image
FROM HEADER_TABLE HT
JOIN LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN IMAGE_TABLE IT
ON IT.IMAGE = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail'
This query returns multiple rows .But I need one unique row for each Header record.
Can anyone help me to fix .
sql-server sql-server-2012 join stored-procedures
New contributor
I am new to mssql .here I need to get some data using joins between three tables .
Header join Lines join Images --> Result
Header Table :
Line Table :
For each header record we can have multiple line items .
Images Table :
Each Image will have unique Image or multiple images .Need to get 1 image url from the list of items for the header record.
Result Set :
Query :
SELECT HT.O_ID,
HT.Type,
HT.Total,
IM.Image
FROM HEADER_TABLE HT
JOIN LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN IMAGE_TABLE IT
ON IT.IMAGE = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail'
This query returns multiple rows .But I need one unique row for each Header record.
Can anyone help me to fix .
sql-server sql-server-2012 join stored-procedures
sql-server sql-server-2012 join stored-procedures
New contributor
New contributor
New contributor
asked Mar 19 at 13:28
ZhuZhu
1161
1161
New contributor
New contributor
4
Hi and welcome to DBA.SE! The table create + insert statements could be useful to get an answer faster. (Testing purposes)
– Randi Vertongen
Mar 19 at 13:32
I need one unique row for each Header record. If so you MUST to build a criteria which will say what record from all record pack with the same header must be returned.
– Akina
Mar 19 at 13:32
Can you check and possibly update a couple of things in your question? Your SQL statement as currently written should return no rows; the second join needs to sayon IT.ITEM_ID = LIT.ITEM_ID
. Also, the sample data that you've included doesn't show any duplicates on the ITEM_ID field, so it doesn't look like the query (with the corrected join) would have any duplicates either. Are there actually multiple rows per Item ID in that table?
– Hellion
Mar 19 at 17:34
add a comment |
4
Hi and welcome to DBA.SE! The table create + insert statements could be useful to get an answer faster. (Testing purposes)
– Randi Vertongen
Mar 19 at 13:32
I need one unique row for each Header record. If so you MUST to build a criteria which will say what record from all record pack with the same header must be returned.
– Akina
Mar 19 at 13:32
Can you check and possibly update a couple of things in your question? Your SQL statement as currently written should return no rows; the second join needs to sayon IT.ITEM_ID = LIT.ITEM_ID
. Also, the sample data that you've included doesn't show any duplicates on the ITEM_ID field, so it doesn't look like the query (with the corrected join) would have any duplicates either. Are there actually multiple rows per Item ID in that table?
– Hellion
Mar 19 at 17:34
4
4
Hi and welcome to DBA.SE! The table create + insert statements could be useful to get an answer faster. (Testing purposes)
– Randi Vertongen
Mar 19 at 13:32
Hi and welcome to DBA.SE! The table create + insert statements could be useful to get an answer faster. (Testing purposes)
– Randi Vertongen
Mar 19 at 13:32
I need one unique row for each Header record. If so you MUST to build a criteria which will say what record from all record pack with the same header must be returned.
– Akina
Mar 19 at 13:32
I need one unique row for each Header record. If so you MUST to build a criteria which will say what record from all record pack with the same header must be returned.
– Akina
Mar 19 at 13:32
Can you check and possibly update a couple of things in your question? Your SQL statement as currently written should return no rows; the second join needs to say
on IT.ITEM_ID = LIT.ITEM_ID
. Also, the sample data that you've included doesn't show any duplicates on the ITEM_ID field, so it doesn't look like the query (with the corrected join) would have any duplicates either. Are there actually multiple rows per Item ID in that table?– Hellion
Mar 19 at 17:34
Can you check and possibly update a couple of things in your question? Your SQL statement as currently written should return no rows; the second join needs to say
on IT.ITEM_ID = LIT.ITEM_ID
. Also, the sample data that you've included doesn't show any duplicates on the ITEM_ID field, so it doesn't look like the query (with the corrected join) would have any duplicates either. Are there actually multiple rows per Item ID in that table?– Hellion
Mar 19 at 17:34
add a comment |
2 Answers
2
active
oldest
votes
You can use CROSS APPLY
to SELECT
just the TOP 1
image from each particular header. APPLY
is similar to a function you can create "on the go" that links columns or expressions from outside to it's filters or joins.
SELECT
-- Header columns:
HT.O_ID,
HT.Type,
HT.Total,
-- Columns from the CROSS APPLY result
I.Image
FROM
HEADER_TABLE HT
CROSS APPLY (
SELECT TOP 1 -- Just retrieve 1 row (for each HT row)
IT.IMAGE
FROM
LINE_ITEM_TABLE LIT
INNER JOIN IMAGE_TABLE IT ON IT.ITEM_ID = LIT.ITEM_ID
WHERE
LIT.O_ID = HT.O_ID AND -- Link the outmost header "HT" record to it's lines "LIT"
IT.SECTION = 'Retail') AS I
You can add an ORDER BY
inside the CROSS APPLY
to determine which image will get selected. You can also change the CROSS APPLY
to OUTER APPLY
if you want header rows to display even when there is no matching record coming from the APPLY
operator (the IMAGE
column will be NULL
).
add a comment |
But I need one unique row for each Header record.
To me it is unclear if you mean one unique record per HT.O_ID
or no duplicate records regarding all the four columns returned.
If it is the latter, add the DISTINCT
keyword to your query (and add the schema names).
SELECT DISTINCT HT.O_ID,
HT.Type,
HT.Total,
IT.Image
FROM dbo.HEADER_TABLE HT
JOIN dbo.LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN dbo.IMAGE_TABLE IT
ON IT.Item_ID = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail';
Result
O_ID Type Total Image
1001 Online $10 URL
If that does not solve it
Then you would have to group by the values in the Header_Table
And decide which Image
you need to keep,do concatenation on it, ....
SELECT HT.O_ID,
HT.Type,
HT.Total,
MAX(IT.Image) as MaxURL
FROM dbo.HEADER_TABLE HT
JOIN dbo.LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN dbo.IMAGE_TABLE IT
ON IT.Item_ID = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail'
GROUP BY HT.O_ID,HT.Type,HT.Total;
Test data
CREATE TABLE dbo.HEADER_TABLE(O_ID int,Type varchar(100),Total varchar(10))
INSERT INTO dbo.HEADER_TABLE(O_ID,Type,Total)
VALUES (1001,'Online','$10');
CREATE TABLE dbo.LINE_ITEM_TABLE(ID int,O_ID int,Item_ID varchar(4),Line_Total varchar(10));
INSERT INTO dbo.LINE_ITEM_TABLE(ID,O_ID,Item_ID,Line_Total)
VALUES (1,1001,'P001','$2'),
(2,1001,'P002','$2'),
(3,1001,'P003','$2'),
(4,1001,'P004','$2'),
(5,1001,'P005','$2');
CREATE TABLE dbo.IMAGE_TABLE(Item_ID varchar(10),Image varchar(100),Section varchar(10))
INSERT INTO dbo.IMAGE_TABLE
VALUES ('P001','URL','Retail'),
('P002','URL','Retail'),
('P003','URL','Stock'),
('P004','URL','Retail'),
('P005','URL','Retail');
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "182"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Zhu is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f232523%2fget-top-1-row-value-from-third-table-while-joining-3-tables-mssql%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use CROSS APPLY
to SELECT
just the TOP 1
image from each particular header. APPLY
is similar to a function you can create "on the go" that links columns or expressions from outside to it's filters or joins.
SELECT
-- Header columns:
HT.O_ID,
HT.Type,
HT.Total,
-- Columns from the CROSS APPLY result
I.Image
FROM
HEADER_TABLE HT
CROSS APPLY (
SELECT TOP 1 -- Just retrieve 1 row (for each HT row)
IT.IMAGE
FROM
LINE_ITEM_TABLE LIT
INNER JOIN IMAGE_TABLE IT ON IT.ITEM_ID = LIT.ITEM_ID
WHERE
LIT.O_ID = HT.O_ID AND -- Link the outmost header "HT" record to it's lines "LIT"
IT.SECTION = 'Retail') AS I
You can add an ORDER BY
inside the CROSS APPLY
to determine which image will get selected. You can also change the CROSS APPLY
to OUTER APPLY
if you want header rows to display even when there is no matching record coming from the APPLY
operator (the IMAGE
column will be NULL
).
add a comment |
You can use CROSS APPLY
to SELECT
just the TOP 1
image from each particular header. APPLY
is similar to a function you can create "on the go" that links columns or expressions from outside to it's filters or joins.
SELECT
-- Header columns:
HT.O_ID,
HT.Type,
HT.Total,
-- Columns from the CROSS APPLY result
I.Image
FROM
HEADER_TABLE HT
CROSS APPLY (
SELECT TOP 1 -- Just retrieve 1 row (for each HT row)
IT.IMAGE
FROM
LINE_ITEM_TABLE LIT
INNER JOIN IMAGE_TABLE IT ON IT.ITEM_ID = LIT.ITEM_ID
WHERE
LIT.O_ID = HT.O_ID AND -- Link the outmost header "HT" record to it's lines "LIT"
IT.SECTION = 'Retail') AS I
You can add an ORDER BY
inside the CROSS APPLY
to determine which image will get selected. You can also change the CROSS APPLY
to OUTER APPLY
if you want header rows to display even when there is no matching record coming from the APPLY
operator (the IMAGE
column will be NULL
).
add a comment |
You can use CROSS APPLY
to SELECT
just the TOP 1
image from each particular header. APPLY
is similar to a function you can create "on the go" that links columns or expressions from outside to it's filters or joins.
SELECT
-- Header columns:
HT.O_ID,
HT.Type,
HT.Total,
-- Columns from the CROSS APPLY result
I.Image
FROM
HEADER_TABLE HT
CROSS APPLY (
SELECT TOP 1 -- Just retrieve 1 row (for each HT row)
IT.IMAGE
FROM
LINE_ITEM_TABLE LIT
INNER JOIN IMAGE_TABLE IT ON IT.ITEM_ID = LIT.ITEM_ID
WHERE
LIT.O_ID = HT.O_ID AND -- Link the outmost header "HT" record to it's lines "LIT"
IT.SECTION = 'Retail') AS I
You can add an ORDER BY
inside the CROSS APPLY
to determine which image will get selected. You can also change the CROSS APPLY
to OUTER APPLY
if you want header rows to display even when there is no matching record coming from the APPLY
operator (the IMAGE
column will be NULL
).
You can use CROSS APPLY
to SELECT
just the TOP 1
image from each particular header. APPLY
is similar to a function you can create "on the go" that links columns or expressions from outside to it's filters or joins.
SELECT
-- Header columns:
HT.O_ID,
HT.Type,
HT.Total,
-- Columns from the CROSS APPLY result
I.Image
FROM
HEADER_TABLE HT
CROSS APPLY (
SELECT TOP 1 -- Just retrieve 1 row (for each HT row)
IT.IMAGE
FROM
LINE_ITEM_TABLE LIT
INNER JOIN IMAGE_TABLE IT ON IT.ITEM_ID = LIT.ITEM_ID
WHERE
LIT.O_ID = HT.O_ID AND -- Link the outmost header "HT" record to it's lines "LIT"
IT.SECTION = 'Retail') AS I
You can add an ORDER BY
inside the CROSS APPLY
to determine which image will get selected. You can also change the CROSS APPLY
to OUTER APPLY
if you want header rows to display even when there is no matching record coming from the APPLY
operator (the IMAGE
column will be NULL
).
answered Mar 19 at 13:47
EzLoEzLo
2,6641521
2,6641521
add a comment |
add a comment |
But I need one unique row for each Header record.
To me it is unclear if you mean one unique record per HT.O_ID
or no duplicate records regarding all the four columns returned.
If it is the latter, add the DISTINCT
keyword to your query (and add the schema names).
SELECT DISTINCT HT.O_ID,
HT.Type,
HT.Total,
IT.Image
FROM dbo.HEADER_TABLE HT
JOIN dbo.LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN dbo.IMAGE_TABLE IT
ON IT.Item_ID = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail';
Result
O_ID Type Total Image
1001 Online $10 URL
If that does not solve it
Then you would have to group by the values in the Header_Table
And decide which Image
you need to keep,do concatenation on it, ....
SELECT HT.O_ID,
HT.Type,
HT.Total,
MAX(IT.Image) as MaxURL
FROM dbo.HEADER_TABLE HT
JOIN dbo.LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN dbo.IMAGE_TABLE IT
ON IT.Item_ID = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail'
GROUP BY HT.O_ID,HT.Type,HT.Total;
Test data
CREATE TABLE dbo.HEADER_TABLE(O_ID int,Type varchar(100),Total varchar(10))
INSERT INTO dbo.HEADER_TABLE(O_ID,Type,Total)
VALUES (1001,'Online','$10');
CREATE TABLE dbo.LINE_ITEM_TABLE(ID int,O_ID int,Item_ID varchar(4),Line_Total varchar(10));
INSERT INTO dbo.LINE_ITEM_TABLE(ID,O_ID,Item_ID,Line_Total)
VALUES (1,1001,'P001','$2'),
(2,1001,'P002','$2'),
(3,1001,'P003','$2'),
(4,1001,'P004','$2'),
(5,1001,'P005','$2');
CREATE TABLE dbo.IMAGE_TABLE(Item_ID varchar(10),Image varchar(100),Section varchar(10))
INSERT INTO dbo.IMAGE_TABLE
VALUES ('P001','URL','Retail'),
('P002','URL','Retail'),
('P003','URL','Stock'),
('P004','URL','Retail'),
('P005','URL','Retail');
add a comment |
But I need one unique row for each Header record.
To me it is unclear if you mean one unique record per HT.O_ID
or no duplicate records regarding all the four columns returned.
If it is the latter, add the DISTINCT
keyword to your query (and add the schema names).
SELECT DISTINCT HT.O_ID,
HT.Type,
HT.Total,
IT.Image
FROM dbo.HEADER_TABLE HT
JOIN dbo.LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN dbo.IMAGE_TABLE IT
ON IT.Item_ID = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail';
Result
O_ID Type Total Image
1001 Online $10 URL
If that does not solve it
Then you would have to group by the values in the Header_Table
And decide which Image
you need to keep,do concatenation on it, ....
SELECT HT.O_ID,
HT.Type,
HT.Total,
MAX(IT.Image) as MaxURL
FROM dbo.HEADER_TABLE HT
JOIN dbo.LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN dbo.IMAGE_TABLE IT
ON IT.Item_ID = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail'
GROUP BY HT.O_ID,HT.Type,HT.Total;
Test data
CREATE TABLE dbo.HEADER_TABLE(O_ID int,Type varchar(100),Total varchar(10))
INSERT INTO dbo.HEADER_TABLE(O_ID,Type,Total)
VALUES (1001,'Online','$10');
CREATE TABLE dbo.LINE_ITEM_TABLE(ID int,O_ID int,Item_ID varchar(4),Line_Total varchar(10));
INSERT INTO dbo.LINE_ITEM_TABLE(ID,O_ID,Item_ID,Line_Total)
VALUES (1,1001,'P001','$2'),
(2,1001,'P002','$2'),
(3,1001,'P003','$2'),
(4,1001,'P004','$2'),
(5,1001,'P005','$2');
CREATE TABLE dbo.IMAGE_TABLE(Item_ID varchar(10),Image varchar(100),Section varchar(10))
INSERT INTO dbo.IMAGE_TABLE
VALUES ('P001','URL','Retail'),
('P002','URL','Retail'),
('P003','URL','Stock'),
('P004','URL','Retail'),
('P005','URL','Retail');
add a comment |
But I need one unique row for each Header record.
To me it is unclear if you mean one unique record per HT.O_ID
or no duplicate records regarding all the four columns returned.
If it is the latter, add the DISTINCT
keyword to your query (and add the schema names).
SELECT DISTINCT HT.O_ID,
HT.Type,
HT.Total,
IT.Image
FROM dbo.HEADER_TABLE HT
JOIN dbo.LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN dbo.IMAGE_TABLE IT
ON IT.Item_ID = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail';
Result
O_ID Type Total Image
1001 Online $10 URL
If that does not solve it
Then you would have to group by the values in the Header_Table
And decide which Image
you need to keep,do concatenation on it, ....
SELECT HT.O_ID,
HT.Type,
HT.Total,
MAX(IT.Image) as MaxURL
FROM dbo.HEADER_TABLE HT
JOIN dbo.LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN dbo.IMAGE_TABLE IT
ON IT.Item_ID = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail'
GROUP BY HT.O_ID,HT.Type,HT.Total;
Test data
CREATE TABLE dbo.HEADER_TABLE(O_ID int,Type varchar(100),Total varchar(10))
INSERT INTO dbo.HEADER_TABLE(O_ID,Type,Total)
VALUES (1001,'Online','$10');
CREATE TABLE dbo.LINE_ITEM_TABLE(ID int,O_ID int,Item_ID varchar(4),Line_Total varchar(10));
INSERT INTO dbo.LINE_ITEM_TABLE(ID,O_ID,Item_ID,Line_Total)
VALUES (1,1001,'P001','$2'),
(2,1001,'P002','$2'),
(3,1001,'P003','$2'),
(4,1001,'P004','$2'),
(5,1001,'P005','$2');
CREATE TABLE dbo.IMAGE_TABLE(Item_ID varchar(10),Image varchar(100),Section varchar(10))
INSERT INTO dbo.IMAGE_TABLE
VALUES ('P001','URL','Retail'),
('P002','URL','Retail'),
('P003','URL','Stock'),
('P004','URL','Retail'),
('P005','URL','Retail');
But I need one unique row for each Header record.
To me it is unclear if you mean one unique record per HT.O_ID
or no duplicate records regarding all the four columns returned.
If it is the latter, add the DISTINCT
keyword to your query (and add the schema names).
SELECT DISTINCT HT.O_ID,
HT.Type,
HT.Total,
IT.Image
FROM dbo.HEADER_TABLE HT
JOIN dbo.LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN dbo.IMAGE_TABLE IT
ON IT.Item_ID = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail';
Result
O_ID Type Total Image
1001 Online $10 URL
If that does not solve it
Then you would have to group by the values in the Header_Table
And decide which Image
you need to keep,do concatenation on it, ....
SELECT HT.O_ID,
HT.Type,
HT.Total,
MAX(IT.Image) as MaxURL
FROM dbo.HEADER_TABLE HT
JOIN dbo.LINE_ITEM_TABLE LIT
ON LIT.O_ID = HT.O_ID
JOIN dbo.IMAGE_TABLE IT
ON IT.Item_ID = LIT.ITEM_ID
WHERE IT.SECTION = 'Retail'
GROUP BY HT.O_ID,HT.Type,HT.Total;
Test data
CREATE TABLE dbo.HEADER_TABLE(O_ID int,Type varchar(100),Total varchar(10))
INSERT INTO dbo.HEADER_TABLE(O_ID,Type,Total)
VALUES (1001,'Online','$10');
CREATE TABLE dbo.LINE_ITEM_TABLE(ID int,O_ID int,Item_ID varchar(4),Line_Total varchar(10));
INSERT INTO dbo.LINE_ITEM_TABLE(ID,O_ID,Item_ID,Line_Total)
VALUES (1,1001,'P001','$2'),
(2,1001,'P002','$2'),
(3,1001,'P003','$2'),
(4,1001,'P004','$2'),
(5,1001,'P005','$2');
CREATE TABLE dbo.IMAGE_TABLE(Item_ID varchar(10),Image varchar(100),Section varchar(10))
INSERT INTO dbo.IMAGE_TABLE
VALUES ('P001','URL','Retail'),
('P002','URL','Retail'),
('P003','URL','Stock'),
('P004','URL','Retail'),
('P005','URL','Retail');
edited Mar 19 at 13:47
answered Mar 19 at 13:40
Randi VertongenRandi Vertongen
3,856824
3,856824
add a comment |
add a comment |
Zhu is a new contributor. Be nice, and check out our Code of Conduct.
Zhu is a new contributor. Be nice, and check out our Code of Conduct.
Zhu is a new contributor. Be nice, and check out our Code of Conduct.
Zhu is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Database Administrators Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f232523%2fget-top-1-row-value-from-third-table-while-joining-3-tables-mssql%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
4
Hi and welcome to DBA.SE! The table create + insert statements could be useful to get an answer faster. (Testing purposes)
– Randi Vertongen
Mar 19 at 13:32
I need one unique row for each Header record. If so you MUST to build a criteria which will say what record from all record pack with the same header must be returned.
– Akina
Mar 19 at 13:32
Can you check and possibly update a couple of things in your question? Your SQL statement as currently written should return no rows; the second join needs to say
on IT.ITEM_ID = LIT.ITEM_ID
. Also, the sample data that you've included doesn't show any duplicates on the ITEM_ID field, so it doesn't look like the query (with the corrected join) would have any duplicates either. Are there actually multiple rows per Item ID in that table?– Hellion
Mar 19 at 17:34