Zhu*_*Zhu 4 join sql-server stored-procedures sql-server-2012
我是 mssql 的新手。在这里我需要使用三个表之间的连接来获取一些数据。
Header join Lines join Images --> 结果
标题表:
行表:
对于每个标题记录,我们可以有多个行项目。
图像表:
每个图像将具有唯一图像或多个图像。需要从标题记录的项目列表中获取 1 个图像 url。
结果集:
询问 :
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'
Run Code Online (Sandbox Code Playgroud)
此查询返回多行。但我需要为每个标题记录一个唯一的行。
谁能帮我修一下。
您可以使用CROSS APPLY到SELECT刚刚TOP 1从每个特定的标题图片。APPLY类似于您可以“随时随地”创建的函数,该函数将外部的列或表达式链接到其过滤器或联接。
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
Run Code Online (Sandbox Code Playgroud)
您可以添加一个ORDER BYinsideCROSS APPLY来确定将选择哪个图像。您也可以更改CROSS APPLY到OUTER APPLY,如果你想标题行显示,即使没有来自未来的不匹配记录APPLY操作员(IMAGE列会NULL)。
| 归档时间: |
|
| 查看次数: |
3152 次 |
| 最近记录: |