【发布时间】:2012-10-19 18:52:01
【问题描述】:
这个太让我头疼了!基本上,我需要显示位置列表、存储在那里的当前项目以及拥有它的人。我创建了 4 个表并在其中填充了数据。
设置:MSSQL 2008
我正在寻找的是来自 tbl_locationHistory 的项目和所有者的“Top(1)”,因为在每个位置的任何时候都只能有一个项目或一个所有者。请记住,tbl_locationHistory 可能有多个数据位,我只需要为每个数据提取最新的 ID(例如,历史表中当前可用的最高 ownerID、最高 itemID)。
tbl_location
locID 本地名称
tbl_item
项目ID 物品名称
tbl_owner
所有者ID 所有者名称
tbl_locationHistory
>locHistID 位置标识 物品编号 所有者ID 修改日期
我尝试使用连接将所有这些表连接在一起。但是我意识到这不起作用,因为我没有拉回“所有者”或“物品”的顶部 ID,因此显示的数据将不准确。
我想到的一件事是我应该将历史记录表分成两部分:1 x 所有者到位置和 1 x 项目到位置 - 但是我现在处于 SQL 的极限,所以可以使用一些指针正确的方向,不知道该走哪条路。
因此,即使我必须分解历史记录表,我也需要帮助。
2012 年 1 月 11 日更新
好的,我要在这里粘贴一些代码。
我是一个老派的经典 ASP 编码器.....还需要继续前进!我正在使用经典的 asp 和 MSSQL 来创建这个应用程序。我也在使用dreamweaver,因此希望将查询放在其中,这样我就可以使用DW CS6中的“绑定”功能。
这是我最初的查询:
SELECT DISTINCT p.pID, p.cliID, p.pNo, p.pName, p.dtCommissioned,
p.description, ps.plotStatus, pt.plotType, o.oSalutation, o.oFname, o.oSname, man.manName,
mod.model, sl.width, sl.length, sl.yr
FROM history AS ph INNER JOIN owners AS o ON ph.ownerID
= o.ownerID INNER JOIN StockList AS sl ON ph.stockID = sl.stkID
INNER JOIN manufacturers AS man ON sl.make = man.manID
INNER JOIN models AS mod ON sl.model = mod.cID FULL OUTER
JOIN plotType AS pt RIGHT OUTER JOIN
plots AS p ON pt.plotTypeID = p.plotType LEFT OUTER JOIN
plotStatus AS ps ON p.pStatus = ps.plotStatusID ON ph.plotID = p.pID
WHERE (p.cliID = value)
ORDER BY p.pNo
现在,当我意识到我没有正确地在历史表中查找“stockID”的最高 HistoryID 以及“ownerID”的最高 plotHistoryID 时,我开始研究如何执行“子查询”每个ID……这就是我卡住的地方。
我已经尝试了一些类似的东西:
Select p.pID, p.cliID, p.pNo, p.pName, p.dtCommissioned,
p.description, ps.plotStatus, pt.plotType, o.oSalutation, o.oFname, o.oSname, man.manName,
mod.model, sl.width, sl.length, sl.yr
(Select top 1 ph.plotHistoryID, ownerID
FROM History AS ph
order by ph.plotHistoryID desc)
THEN JOINING ETC
THEN DO ANOTHER SUBQUERY FOR THE OWNER ETC
但是我无法让它工作,但我现在超出了与子查询和联接相关的 SQL 水平。
输出显示将是:
情节编号 |地块名称 |情节类型 |地块状态 |当前所有者 |当前库存
每个绘图编号/名称/类型/状态都将填充我需要显示的数据。如果所有者\当前库存为空白,我有一个 IF 语句,说“没有所有者”或“没有找到库存”。
然后,用户将能够单击行末尾的“查看”链接并查看绘图/位置的详细信息,并将 pID 通过 QueryString 传递到下一页。
这有帮助吗?我现在有点绝望了!哈哈
【问题讨论】:
-
如果我正确理解您想要做什么,那么加入就完全没有问题。您按 dateModified 排序的事实(您是,对吗?)意味着您将获得 tbl_locationHistory 的顶部,并且其他表将正确加入它
标签: sql sql-server-2008 join subquery one-to-many