Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何仅从SQL SERVER表中选择第一行_Sql Server_Sql Server 2014 - Fatal编程技术网

Sql server 如何仅从SQL SERVER表中选择第一行

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,

我有一个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,
  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,因为它们是在演示时应用的,因此仅适用于顶层查询它的工作方式。感谢您分享宝贵的知识。这些知识对我将来会有帮助。谢谢大家。