2012-09-24 5 views
0

У меня есть 4 таблицыSQL Server 2008 подзапросов с несколькими таблицами

Таблица 1 - РОЗЫГРЫШ Submissions-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 - РИСОВАНИЕ-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, чертеж CSD № в таблице 2 и проект LI № в таблице 3 являются уникальными.

Когда чертежный CSD No будет иметь новое No Revision No, создается новый номер ссылки. Проверено, нет ли задержек CSD № чертежа или нет, для последнего ссылочного номера для этого конкретного чертежа CSD №

Я хочу, чтобы последний ссылочный номер в таблице 4, статус DRWG и Recvd на FFM в таблице 1, инженер inCharge и Drawing Title в таблице 2. Мы предоставим только LI Project No в качестве входных данных.

+2

вы пробовали писать запрос самостоятельно? Мы будем рады помочь, но мы не здесь, чтобы сделать все для вас. Там слишком много freeloaders, поэтому мы хотели бы, чтобы вы показали, что вы, по крайней мере, пытались это сделать сами. –

+0

Звучит разочаровывающе, как домашнее задание ... но я могу попытаться ответить на него в любом случае. –

+0

Я пробовал. но я получил полный номер ссылки вместо последнего. Я написал следующий запрос: – renmat

ответ

0

Возможно, вы сделали это с помощью простого перетаскивания &. Отключить интерфейс «Access-style» (хотя я редко советую его, за исключением полных новичков). Я предполагаю, что [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 

Edit:

Для ряда на [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 

Edit:

Потому что вам нужны только чертежи, которые относятся к прилагаемому проекту:

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 
+0

Надеюсь, это сработает. Я попробую это и обновит вас. Спасибо – renmat

+0

Это сработало. Спасибо Rob – renmat

+0

Он дал только последнюю ссылку №. Но мне нужен последний ссылочный номер для каждого чертежного CSD № – renmat

Смежные вопросы