我有4张桌子
表1 - 绘图提交-DTS
SUBMISSION-ID,
DRAWING-ID,
INWARD-ID,
REVISION NO,
COMMENT DATE,
COMMENTS FORWARDED TO WED,
STATUS OF DRWG,
RECVD AT FFM,
REMARKS,
Last,
Remarks2,
Drawing Sheet,
表2 - DRAWING-MAIN-DTS
DRAWING-ID,
DRAWING CSD NO,
DRAWING TITLE,
ENGINEER INCHARGE,
表3 - LI项目
PROJECT TITLE,
LI PROJECT NO,
表4 - 内向
INWARD-ID,
REFERENCE NO,
LI PROJECT NO,
TYPE OF INCOMING DOC,
所有表格都与该表格中的一个字段相关。
表4中的参考编号,表2中的绘制CSD编号和表3中的LI项目编号是唯一的。
当绘图CSD否将具有新的修订号时,将生成新的参考号。 在特定图纸CSD编号
的最后参考编号上检查图纸CSD编号是否延迟我想要表4中的最后一个参考号,表1中FFM的DRWG和Recvd的状态,表2中的工程师充电和绘图标题作为结果。我们只给出LI Project No作为输入。
答案 0 :(得分:0)
你可能已经使用简单的拖拽和放大器完成了这项工作。删除“访问风格”UI(虽然我很少建议除了完整的初学者)。我猜测[LI PROJECT NO]
是一个整数字段......
CREATE PROC dbo.GetLIProjectInfo (@LIProjNo INT)
AS
-- I got this from stackoverflow.com, see http://stackoverflow.com/questions/12559023/sql-server-2008-subquery-with-multiple-tables
BEGIN
SELECT TOP (1)
i.[REFERENCE NO],
ds.[STATUS OF DRWG],
ds.[RECVD AT FFM],
dm.[DRAWING TITLE],
dm.[ENGINEER INCHARGE]
FROM dbo.[DRAWING SUBMISSIONS-DTS] AS ds
JOIN dbo.[DRAWING-MAIN-DTS] AS dm
ON dm.[DRAWING-ID] = ds.[DRAWING-ID]
JOIN dbo.[Inward] AS i
ON i.[INWARD-ID] = ds.[INWARD-ID]
JOIN dbo.[LI PROJECTS] AS p
ON p.[LI PROJECT NO] = i.[LI PROJECT NO]
WHERE i.[LI PROJECT NO] = @LIProjNo
ORDER BY i.[REFERENCE NO] DESC;
END
编辑:
对于每[DRAWING CSD NO]
行,您需要确定是否希望LIProjNo过滤器过滤图纸列表或仅过滤项目列表。
CREATE PROC dbo.GetLIProjectInfo (@LIProjNo INT)
AS
-- I got this from stackoverflow.com, see http://stackoverflow.com/questions/12559023/sql-server-2008-subquery-with-multiple-tables
BEGIN
SELECT *
FROM
(SELECT DISTINCT [DRAWING CSD NO]
FROM dbo.[DRAWING-MAIN-DTS]) AS csd
OUTER APPLY --Could be CROSS APPLY if you need
(SELECT TOP (1)
i.[REFERENCE NO],
ds.[STATUS OF DRWG],
ds.[RECVD AT FFM],
dm.[DRAWING TITLE],
dm.[ENGINEER INCHARGE]
FROM dbo.[DRAWING SUBMISSIONS-DTS] AS ds
JOIN dbo.[DRAWING-MAIN-DTS] AS dm
ON dm.[DRAWING-ID] = ds.[DRAWING-ID]
JOIN dbo.[Inward] AS i
ON i.[INWARD-ID] = ds.[INWARD-ID]
JOIN dbo.[LI PROJECTS] AS p
ON p.[LI PROJECT NO] = i.[LI PROJECT NO]
WHERE i.[LI PROJECT NO] = @LIProjNo
AND dm.[DRAWING CSD NO] = csd.[DRAWING CSD NO]
ORDER BY i.[REFERENCE NO] DESC) as inf
ORDER BY csd.[DRAWING CSD NO];
END
编辑:
因为您只需要与提供的项目相关的图纸:
CREATE PROC dbo.GetLIProjectInfo (@LIProjNo INT)
AS
-- I got this from stackoverflow.com, see http://stackoverflow.com/questions/12559023/sql-server-2008-subquery-with-multiple-tables
BEGIN
WITH Numbered AS (
SELECT
ROW_NUMBER() OVER (PARTITION BY dm.[DRAWING CSD NO] ORDER BY i.[REFERENCE NO] DESC) AS RowNum,
i.[REFERENCE NO],
ds.[STATUS OF DRWG],
ds.[RECVD AT FFM],
dm.[DRAWING TITLE],
dm.[ENGINEER INCHARGE]
FROM dbo.[DRAWING SUBMISSIONS-DTS] AS ds
JOIN dbo.[DRAWING-MAIN-DTS] AS dm
ON dm.[DRAWING-ID] = ds.[DRAWING-ID]
JOIN dbo.[Inward] AS i
ON i.[INWARD-ID] = ds.[INWARD-ID]
JOIN dbo.[LI PROJECTS] AS p
ON p.[LI PROJECT NO] = i.[LI PROJECT NO]
WHERE i.[LI PROJECT NO] = @LIProjNo
)
SELECT *
FROM Numbered
WHERE RowNum = 1;
END