Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 2008中被忽略的顺序_Sql Server_Sql Server 2008_Sql Order By - Fatal编程技术网

Sql server 在具有多个子查询的SQL Server 2008中被忽略的顺序

Sql server 在具有多个子查询的SQL Server 2008中被忽略的顺序,sql-server,sql-server-2008,sql-order-by,Sql Server,Sql Server 2008,Sql Order By,我有一份报告返回了一份患者就诊的列表,但就诊顺序完全混乱。访问列表在子查询中获得,如下所示: INNER JOIN (SELECT subject_id, A.id [VisitID], A.visit_schedule_id [VisitScheduleID], B.client_visit_descripti

我有一份报告返回了一份患者就诊的列表,但就诊顺序完全混乱。访问列表在子查询中获得,如下所示:

INNER JOIN (SELECT subject_id,
                               A.id [VisitID],
                               A.visit_schedule_id [VisitScheduleID],
                               B.client_visit_description [Visit],
                               visit_date_local [Visit Date],
                               call_date [Call Date]
                FROM tbl_visit A
                INNER JOIN tbl_visit_schedule B ON B.id = A.visit_schedule_id) F
有一个内部查询,它使用这个“F”块获取相关值以显示给最终用户,如下所示:

SELECT TOP 9999999999
           A.[name] [Country Name], 
           B.[site_number] [Site Number], 
           D.[investigator_name] [Investigator Name], 
           C.[spid] [Patient Number], 
           E.[YOB] [Year of Birth], 
           F.[Visit] [Visit], 
           CONVERT(NVARCHAR, F.[Visit Date], 120) [Visit Date],
           ISNULL(pl.[Pack(s) Assigned], 'N/A') [Kit Assigned],
           H.[Confirmation (doc)]
    FROM   (
最后还有一个外部选择,向用户显示:

SELECT DISTINCT
   [Country Name], 
   [Investigator Name], 
   [Patient Number], 
   [Year of Birth], 
   --[Visit], 
   [Visit Date],
   [Kit Assigned],
   [Confirmation (doc)]
FROM   (
我有一个内部select语句的ORDER BY,如下所示:

ORDER BY CAST(F.[Visit Date] AS DATE) asc, F.[Call Date] asc
问题是,当我显示所有内容时('Visit'没有注释掉),SQL会以非顺序的方式返回结果,即使最后是order by。然而,如果我对这次访问进行评论,结果就开始有序了

我不确定这一专栏对导致order by失败的报告的其余部分有什么意义,还有其他人对此有任何线索吗

更新:以下是整个查询:

SELECT DISTINCT site_id, site_number, 
       [Country Name], 
       [Investigator Name], 
       [Patient Number], 
       [Year of Birth], 
       [Visit], 
       [Visit Date],
       [Kit Assigned],
       [Confirmation (doc)]
FROM   (SELECT TOP 99999999999
        B.[id] [site_id], 
               B.[site_number] [site_number], 
               A.[name] [Country Name], 
               B.[site_number] [Site Number], 
               B.[site_number] [SiteNumber], 
               D.[investigator_name] [Investigator Name], 
               C.[spid] [Patient Number], 
               E.[YOB] [Year of Birth], 
               F.[Visit] [Visit], 
               CONVERT(NVARCHAR, F.[Visit Date], 120) [Visit Date],
               ISNULL(pl.[Pack(s) Assigned], 'N/A') [Kit Assigned],
               H.[Confirmation (doc)]
        FROM   (
                SELECT [id], 
                       [name], 
                       [code] [country_code] 
                FROM   [dbo].[tbl_country]) A 
               INNER JOIN [dbo].[tbl_site] B 
                       ON A.[id] = B.[country_id] 
               INNER JOIN [dbo].[tbl_subject] C 
                       ON B.[id] = C.[site_id] 
               LEFT JOIN (SELECT A.id, 
                                 A.inv_first_name + ' ' + A.inv_last_name 
                                 [investigator_name] 
                          FROM   vw_site A) D 
                      ON B.[id] = D.[id] 
               INNER JOIN (SELECT A.[subject_id], 
                                  B.int_value [YOB] 
                           FROM   vw_subject_info A 
                                  INNER JOIN tbl_custom_data B 
                                          ON B.row_id = A.subject_id 
                                             AND B.table_name = 'Subject' 
                                             AND B.[field_name] = 'Initial_DOB') 
                          E 
                       ON C.[id] = E.[subject_id] 
               INNER JOIN (
                            SELECT subject_id,
                                   VisitID,
                                   VisitScheduleID,
                                   site_id,
                                   site_number,
                                   visit [Visit],
                                   visit_date_local [Visit Date],
                                   call_date [Call Date]
                            FROM vw_visit
                           ) F 
                       ON C.[id] = F.[subject_id] 
              LEFT JOIN (SELECT [visit_id],
                          [int_value] [Confirmation (doc)]
                          FROM  [vw_visitDetail]
                          WHERE  [field_name] = 'docId'
                          ) H
                      ON F.[VisitID] = H.[visit_id]
              --Selecting the packs dispensed at latest dispensing visit              
               LEFT JOIN (SELECT A.[id] [visit_id],
               STUFF((SELECT ', ' + CAST(C.[client_pack_number] AS NVARCHAR(MAX))
                      FROM   [dbo].[tbl_visit_pack] B
                      INNER JOIN [dbo].[tbl_pack] C
                      ON B.[pack_id] = C.[id]
                      INNER JOIN dbo.tbl_pack_type pt
                      ON pt.id = c.pack_type_id
                      WHERE  A.[id] = B.[visit_id]    
                      FOR XML PATH('')), 1, 2, '') AS [Pack(s) Assigned]
               FROM   [dbo].[tbl_visit] A
               GROUP  BY A.[id]) pl
               ON pl.visit_id = F.visitid
               --Ordering
               ORDER BY CAST(F.[Visit Date] AS DATE) asc, F.[Call Date] asc
) rawquery 
--where

要按特定顺序获得输出,需要在“rawquery”别名后添加order by。因为现在查询没有orderby,所以无法知道结果的顺序

SELECT DISTINCT site_id
                , site_number
                , [Country Name]
                , [Investigator Name]
                , [Patient Number]
                , [Year of Birth]
                , [Visit]
                , [Visit Date]
                , [Kit Assigned]
                , [Confirmation (doc)]
FROM   (SELECT TOP 99999999999 B.[id]                                   [site_id]
                               , B.[site_number]                        [site_number]
                               , A.[name]                               [Country Name]
                               , B.[site_number]                        [Site Number]
                               , B.[site_number]                        [SiteNumber]
                               , D.[investigator_name]                  [Investigator Name]
                               , C.[spid]                               [Patient Number]
                               , E.[YOB]                                [Year of Birth]
                               , F.[Visit]                              [Visit]
                               , CONVERT(NVARCHAR, F.[Visit Date], 120) [Visit Date]
                               , Isnull(pl.[Pack(s) Assigned], 'N/A')   [Kit Assigned]
                               , H.[Confirmation (doc)]
        FROM   (SELECT [id]
                       , [name]
                       , [code] [country_code]
                FROM   [dbo].[tbl_country]) A
               INNER JOIN [dbo].[tbl_site] B
                       ON A.[id] = B.[country_id]
               INNER JOIN [dbo].[tbl_subject] C
                       ON B.[id] = C.[site_id]
               LEFT JOIN (SELECT A.id
                                 , A.inv_first_name + ' ' + A.inv_last_name [investigator_name]
                          FROM   vw_site A) D
                      ON B.[id] = D.[id]
               INNER JOIN (SELECT A.[subject_id]
                                  , B.int_value [YOB]
                           FROM   vw_subject_info A
                                  INNER JOIN tbl_custom_data B
                                          ON B.row_id = A.subject_id
                                             AND B.table_name = 'Subject'
                                             AND B.[field_name] = 'Initial_DOB') E
                       ON C.[id] = E.[subject_id]
               INNER JOIN (SELECT subject_id
                                  , VisitID
                                  , VisitScheduleID
                                  , site_id
                                  , site_number
                                  , visit            [Visit]
                                  , visit_date_local [Visit Date]
                                  , call_date        [Call Date]
                           FROM   vw_visit) F
                       ON C.[id] = F.[subject_id]
               LEFT JOIN (SELECT [visit_id]
                                 , [int_value] [Confirmation (doc)]
                          FROM   [vw_visitDetail]
                          WHERE  [field_name] = 'docId') H
                      ON F.[VisitID] = H.[visit_id]
               --Selecting the packs dispensed at latest dispensing visit
               LEFT JOIN (SELECT A.[id]                                [visit_id]
                                 , Stuff((SELECT ', '
                                                 + Cast(C.[client_pack_number] AS NVARCHAR(MAX))
                                          FROM   [dbo].[tbl_visit_pack] B
                                                 INNER JOIN [dbo].[tbl_pack] C
                                                         ON B.[pack_id] = C.[id]
                                                 INNER JOIN dbo.tbl_pack_type pt
                                                         ON pt.id = c.pack_type_id
                                          WHERE  A.[id] = B.[visit_id]
                                          FOR XML PATH('')), 1, 2, '') AS [Pack(s) Assigned]
                          FROM   [dbo].[tbl_visit] A
                          GROUP  BY A.[id]) pl
                      ON pl.visit_id = F.visitid --Ordering 
        ORDER  BY Cast(F.[Visit Date] AS DATE) ASC
                  , F.[Call Date] ASC
) rawquery 
--where
Order By YourColumnHere

您在外部查询中按下单日期下单。请按F下单。访问日期在您的sub中query@Ganesh_Devlekar不幸的是,我无法将其放在外部查询中,因为我在一个框架内实现了这个功能,该框架做了一些特定的事情,从而排除了在外部查询中使用order by。@Steve我尝试过以这种方式对子查询进行排序,并且虽然子查询将以有序的方式返回结果,但最终结果仍然是无序的。尝试将子查询的结果表别名并按顺序排列如何?我必须问……选择子查询中前100亿行有什么意义?您的表是否真的有比这更多的行,并且您希望确保它们是有序的?你意识到像这样对子查询进行排序真的毫无意义吗?前100亿行是我在别处读到的一个hack(),它应该有助于克服在视图中按顺序排序的限制。我知道这是一种糟糕的编码实践,但我真的很想让订购工作正常进行。由于将orderby添加到外部查询对我来说是不可能的,因此我必须接受无法进行排序。谢谢大家的帮助。正如你所说,这是一个黑客行为。它也不再工作了。更糟糕的是,如果查询中的视图使用了相同的方法,那么它就永远不会起作用。哪一个订单可以接受?