如何 select 仅来自 SQL 服务器的第一行 table
How to select only first row from SQL SERVER table
我有一个 SQL 服务器查询。我的任务是 select 只是 table 的第一行。我的计划是使用 TOP 1 。但由于查询太复杂了,我不知道把 TOP 1 放在哪里。请先检查我的查询:
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM AssetDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.AssetPK = md.AssetPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH
(NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM LaborDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER
JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RequesterPK = md.LaborPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT
OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM RepairCenterDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RepairCenterPK = md.RepairCenterPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset
WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM ProjectDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.ProjectPK = md.ProjectPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM WOdocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.WOPK = md.WOPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
ORDER BY WO.WOPK, md.ModuleID, d.DocumentID
现在请检查我的查询输出。有两行。但我必须 select 只有第一个。
请提供任何解决方案。提前致谢。
你试过了吗:
SELECT TOP 1 * FROM (
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM AssetDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.AssetPK = md.AssetPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH
(NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM LaborDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER
JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RequesterPK = md.LaborPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT
OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM RepairCenterDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RepairCenterPK = md.RepairCenterPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset
WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM ProjectDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.ProjectPK = md.ProjectPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM WOdocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.WOPK = md.WOPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
ORDER BY WO.WOPK, md.ModuleID, d.DocumentID
)
) sub
如果您是 SQL 的新手,设置简单的可重新运行示例非常有用:
declare @t table (id int)
insert into @t (id)
select 1 union
select 2
select * from @t
select top 1 * from (
select *
from @t
) z
正如 sgeddes 所说,您的解决方案是:
select top 1 * from (
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM AssetDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.AssetPK = md.AssetPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH
(NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM LaborDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER
JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RequesterPK = md.LaborPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT
OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM RepairCenterDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RepairCenterPK = md.RepairCenterPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset
WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM ProjectDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.ProjectPK = md.ProjectPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM WOdocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.WOPK = md.WOPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
) z ORDER BY WOPK, ModuleID, DocumentID
我有一个 SQL 服务器查询。我的任务是 select 只是 table 的第一行。我的计划是使用 TOP 1 。但由于查询太复杂了,我不知道把 TOP 1 放在哪里。请先检查我的查询:
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM AssetDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.AssetPK = md.AssetPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH
(NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM LaborDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER
JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RequesterPK = md.LaborPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT
OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM RepairCenterDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RepairCenterPK = md.RepairCenterPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset
WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM ProjectDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.ProjectPK = md.ProjectPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM WOdocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.WOPK = md.WOPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
ORDER BY WO.WOPK, md.ModuleID, d.DocumentID
现在请检查我的查询输出。有两行。但我必须 select 只有第一个。
请提供任何解决方案。提前致谢。
你试过了吗:
SELECT TOP 1 * FROM (
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM AssetDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.AssetPK = md.AssetPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH
(NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM LaborDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER
JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RequesterPK = md.LaborPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT
OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM RepairCenterDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RepairCenterPK = md.RepairCenterPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset
WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM ProjectDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.ProjectPK = md.ProjectPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM WOdocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.WOPK = md.WOPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
ORDER BY WO.WOPK, md.ModuleID, d.DocumentID
)
) sub
如果您是 SQL 的新手,设置简单的可重新运行示例非常有用:
declare @t table (id int)
insert into @t (id)
select 1 union
select 2
select * from @t
select top 1 * from (
select *
from @t
) z
正如 sgeddes 所说,您的解决方案是:
select top 1 * from (
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM AssetDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.AssetPK = md.AssetPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH
(NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM LaborDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER
JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RequesterPK = md.LaborPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT
OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM RepairCenterDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.RepairCenterPK = md.RepairCenterPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset
WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM ProjectDocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.ProjectPK = md.ProjectPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
UNION ALL
SELECT
WO.WOPK,
md.PK,
d.LocationType,
d.DocumentID,
d.DocumentName,
md.ModuleID,
d.DocumentTypeDesc,
d.Location,
md.PrintWithWO,
md.SendWithEmail,
md.DisplayLink,
md.RowVersionDate,
d.Photo,
MCModule.TitleforDocumentList,
d.DocumentText
FROM WOdocument md WITH (NOLOCK)
LEFT OUTER JOIN Document d WITH (NOLOCK)
ON md.DocumentPK = d.DocumentPK
INNER JOIN MCModule WITH (NOLOCK)
ON md.ModuleID = MCModule.ModuleID
INNER JOIN WO WITH (NOLOCK)
ON WO.WOPK = md.WOPK
WHERE (WO.WOPK IN (SELECT
WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK)
ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK)
ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10109)
)
AND (d.Active = 1)
) z ORDER BY WOPK, ModuleID, DocumentID