Sql server 如何仅从SQL SERVER表中选择第一行
我有一个SQL SERVER查询。我的任务是从表中只选择第一行。我的计划是使用TOP1。但是由于查询太复杂了,我想不出应该把前1名放在哪里。请先检查我的查询:Sql server 如何仅从SQL SERVER表中选择第一行,sql-server,sql-server-2014,Sql Server,Sql Server 2014,我有一个SQL SERVER查询。我的任务是从表中只选择第一行。我的计划是使用TOP1。但是由于查询太复杂了,我想不出应该把前1名放在哪里。请先检查我的查询: SELECT WO.WOPK, md.PK, d.LocationType, d.DocumentID, d.DocumentName, md.ModuleID, d.DocumentTypeDesc, d.Location, md.PrintWithWO, md.SendWithEmail,
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 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
您是否尝试过:
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新手,设置如下简单的可重新运行示例非常有用:
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
将其全部封装在子查询中-从您的查询中选择top 1*,t总是紧跟在select之后,请注意NOLOCK提示。它有很多隐藏的功能,大多数人都不知道。将其全部封装在子查询中-从您的查询中选择top 1*,t总是紧跟在select之后,请注意NOLOCK提示。它有很多隐藏的功能,大多数人都不知道。我不相信这是正确的-它将返回第一个查询的第一条记录。然后它会将该结果添加到工会的其他记录中。。。这里应该是从整个查询中选择top 1*,tsgeddes,是的,当我第一次回答时,我没有看到查询有多长时间,当我检查并格式化查询时,我看到了工会,感谢您的评论,更新我不相信这是正确的-它将返回第一次查询的第一条记录。然后它会将该结果添加到工会的其他记录中。。。应该是从您的整个查询中选择top 1*,tsgeddes,是的,当我第一次回答时,我没有看到查询有多长时间,当我检查并格式化查询时,我看到了工会,感谢您的评论,updatedi已从上面检查了这两个脚本。但它显示出错误。错误消息是:Msg 1033,级别15,状态1,第176行ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML。supriyo,您不能在子查询中执行ORDER BY,因为它们是在演示时应用的,因此仅适用于顶层查询它的工作方式。感谢您分享宝贵的知识。这些知识对我将来会有帮助。谢谢大家。我已经检查了上面的两个脚本。但它显示出错误。错误消息是:Msg 1033,级别15,状态1,第176行ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML。supriyo,您不能在子查询中执行ORDER BY,因为它们是在演示时应用的,因此仅适用于顶层查询它的工作方式。感谢您分享宝贵的知识。这些知识对我将来会有帮助。谢谢大家。