总行数

时间:2015-07-07 06:40:01

标签: sql sql-server tsql count

我有一个问题,我创建了一个有点复杂的存储过程,这是代码:

SELECT TOP (25) 
    [Project1].[IDC_IDCONTACT] AS [IDC_IDCONTACT], 
    [Project1].[C1] AS [C1], 
    [Project1].[C2] AS [C2], 
    [Project1].[ICP_PRENOM] AS [ICP_PRENOM], 
    [Project1].[IDC_NOSOC] AS [IDC_NOSOC], 
    [Project1].[C3] AS [C3], 
    [Project1].[C4] AS [C4], 
    [Project1].[C5] AS [C5], 
    [Project1].[ADC_CDPOSTAL] AS [ADC_CDPOSTAL], 
    [Project1].[ADC_VILLE] AS [ADC_VILLE], 
    [Project1].[Libelle] AS [Libelle], 
    [Project1].[Libelle1] AS [Libelle1]
    FROM ( SELECT [Project1].[IDC_IDCONTACT] AS [IDC_IDCONTACT], [Project1].[IDC_NOSOC] AS [IDC_NOSOC], [Project1].[ICP_PRENOM] AS [ICP_PRENOM], [Project1].[ADC_CDPOSTAL] AS [ADC_CDPOSTAL], [Project1].[ADC_VILLE] AS [ADC_VILLE], [Project1].[Libelle] AS [Libelle], [Project1].[Libelle1] AS [Libelle1], [Project1].[C1] AS [C1], [Project1].[C2] AS [C2], [Project1].[C3] AS [C3], [Project1].[C4] AS [C4], [Project1].[C5] AS [C5], row_number() OVER (ORDER BY [Project1].[C1] ASC) AS [row_number]
        FROM ( SELECT 
            [Extent1].[IDC_IDCONTACT] AS [IDC_IDCONTACT], 
            [Extent1].[IDC_NOSOC] AS [IDC_NOSOC], 
            [Extent2].[ICP_PRENOM] AS [ICP_PRENOM], 
            [Extent4].[ADC_CDPOSTAL] AS [ADC_CDPOSTAL], 
            [Extent4].[ADC_VILLE] AS [ADC_VILLE], 
            [Extent5].[Libelle] AS [Libelle], 
            [Extent6].[Libelle] AS [Libelle1], 
            LTRIM(RTRIM([Extent1].[IDC_NOM])) AS [C1], 
            LTRIM(RTRIM([Extent2].[ICP_NMNAISS])) AS [C2], 
             CAST( [Extent2].[ICP_DTNAISS] AS datetime2) AS [C3], 
             CAST( [Extent3].[ICR_DTCREA_ENTREPRISE] AS datetime2) AS [C4], 
            CASE WHEN ([Extent1].[IDC_CDPORTEFEUILLE] IS NULL) THEN N'''' ELSE  CAST( [Extent1].[IDC_CDPORTEFEUILLE] AS nvarchar(max)) END AS [C5]
            FROM      [mdw].[IDENTITE_CONTACT] AS [Extent1]
            LEFT OUTER JOIN [mdw].[IDENTITE_CONTACT_PHYSIQUE] AS [Extent2] ON [Extent1].[IDC_IDCONTACT] = [Extent2].[ICP_IDCONTACT]
            LEFT OUTER JOIN [mdw].[IDENTITE_CONTACT_PROFESSIONNEL] AS [Extent3] ON [Extent1].[IDC_IDCONTACT] = [Extent3].[ICR_IDCONTACT]
            LEFT OUTER JOIN [mdw].[ADRESSE_CONTACT] AS [Extent4] ON [Extent1].[IDC_IDCONTACT] = [Extent4].[ADC_IDADR]
            LEFT OUTER JOIN [mdw].[Ref_Profil_Contact] AS [Extent5] ON [Extent1].[IDC_CDPROFIL_CONTACT] = [Extent5].[Cod]
            LEFT OUTER JOIN [mdw].[Ref_Statut] AS [Extent6] ON [Extent1].[IDC_CDSTATUTSOC] = [Extent6].[Cod]
            WHERE ( NOT ((9975 = [Extent1].[IDC_CDPORTEFEUILLE]) AND ([Extent1].[IDC_CDPORTEFEUILLE] IS NOT NULL))) AND ( NOT ((9976 = [Extent1].[IDC_CDPORTEFEUILLE]) AND ([Extent1].[IDC_CDPORTEFEUILLE] IS NOT NULL))) AND ([Extent1].[IDC_CDPROFIL_CONTACT] = 'P')
        )  AS [Project1]
    )  AS [Project1]
    WHERE [Project1].[row_number] > 0
    ORDER BY [Project1].[C1] ASC'

我还要返回总行数,而不仅仅是25行,我不知道放在哪里count(*)。始终存在错误。你能帮帮我吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以添加

THEN o.customer_id END

查询。

对我而言,它运作良好:

COUNT(1) OVER () AS records_count, 

返回:

enter image description here

对于TOP(N)案例:

enter image description here

针对性能查询进行了优化:

SELECT [id]
  ,[p_value]
  ,COUNT(1) OVER () AS records_count
FROM [dbo].[tb_temp]

结果:

enter image description here

答案 1 :(得分:0)

在这种情况下,您可以使用CTE来帮助您使用和不使用TOP子句来查询。

像(非常丑陋,但应该工作):

 WITH QueryCTE AS 
(
SELECT 
    [Project1].[IDC_IDCONTACT] AS [IDC_IDCONTACT], 
    [Project1].[C1] AS [C1], 
    [Project1].[C2] AS [C2], 
    [Project1].[ICP_PRENOM] AS [ICP_PRENOM], 
    [Project1].[IDC_NOSOC] AS [IDC_NOSOC], 
    [Project1].[C3] AS [C3], 
    [Project1].[C4] AS [C4], 
    [Project1].[C5] AS [C5], 
    [Project1].[ADC_CDPOSTAL] AS [ADC_CDPOSTAL], 
    [Project1].[ADC_VILLE] AS [ADC_VILLE], 
    [Project1].[Libelle] AS [Libelle], 
    [Project1].[Libelle1] AS [Libelle1]
    FROM ( SELECT [Project1].[IDC_IDCONTACT] AS [IDC_IDCONTACT], [Project1].[IDC_NOSOC] AS [IDC_NOSOC], [Project1].[ICP_PRENOM] AS [ICP_PRENOM], [Project1].[ADC_CDPOSTAL] AS [ADC_CDPOSTAL], [Project1].[ADC_VILLE] AS [ADC_VILLE], [Project1].[Libelle] AS [Libelle], [Project1].[Libelle1] AS [Libelle1], [Project1].[C1] AS [C1], [Project1].[C2] AS [C2], [Project1].[C3] AS [C3], [Project1].[C4] AS [C4], [Project1].[C5] AS [C5], row_number() OVER (ORDER BY [Project1].[C1] ASC) AS [row_number]
        FROM ( SELECT 
            [Extent1].[IDC_IDCONTACT] AS [IDC_IDCONTACT], 
            [Extent1].[IDC_NOSOC] AS [IDC_NOSOC], 
            [Extent2].[ICP_PRENOM] AS [ICP_PRENOM], 
            [Extent4].[ADC_CDPOSTAL] AS [ADC_CDPOSTAL], 
            [Extent4].[ADC_VILLE] AS [ADC_VILLE], 
            [Extent5].[Libelle] AS [Libelle], 
            [Extent6].[Libelle] AS [Libelle1], 
            LTRIM(RTRIM([Extent1].[IDC_NOM])) AS [C1], 
            LTRIM(RTRIM([Extent2].[ICP_NMNAISS])) AS [C2], 
             CAST( [Extent2].[ICP_DTNAISS] AS datetime2) AS [C3], 
             CAST( [Extent3].[ICR_DTCREA_ENTREPRISE] AS datetime2) AS [C4], 
            CASE WHEN ([Extent1].[IDC_CDPORTEFEUILLE] IS NULL) THEN N'''' ELSE  CAST( [Extent1].[IDC_CDPORTEFEUILLE] AS nvarchar(max)) END AS [C5]
            FROM      [mdw].[IDENTITE_CONTACT] AS [Extent1]
            LEFT OUTER JOIN [mdw].[IDENTITE_CONTACT_PHYSIQUE] AS [Extent2] ON [Extent1].[IDC_IDCONTACT] = [Extent2].[ICP_IDCONTACT]
            LEFT OUTER JOIN [mdw].[IDENTITE_CONTACT_PROFESSIONNEL] AS [Extent3] ON [Extent1].[IDC_IDCONTACT] = [Extent3].[ICR_IDCONTACT]
            LEFT OUTER JOIN [mdw].[ADRESSE_CONTACT] AS [Extent4] ON [Extent1].[IDC_IDCONTACT] = [Extent4].[ADC_IDADR]
            LEFT OUTER JOIN [mdw].[Ref_Profil_Contact] AS [Extent5] ON [Extent1].[IDC_CDPROFIL_CONTACT] = [Extent5].[Cod]
            LEFT OUTER JOIN [mdw].[Ref_Statut] AS [Extent6] ON [Extent1].[IDC_CDSTATUTSOC] = [Extent6].[Cod]
            WHERE ( NOT ((9975 = [Extent1].[IDC_CDPORTEFEUILLE]) AND ([Extent1].[IDC_CDPORTEFEUILLE] IS NOT NULL))) AND ( NOT ((9976 = [Extent1].[IDC_CDPORTEFEUILLE]) AND ([Extent1].[IDC_CDPORTEFEUILLE] IS NOT NULL))) AND ([Extent1].[IDC_CDPROFIL_CONTACT] = 'P')
        )  AS [Project1]
    )  AS [Project1]
    WHERE [Project1].[row_number] > 0

)
SELECT TOP (25) 
* 
,(SELECT COUNT(*) FROM QueryCTE) AS NBRows
FROM QueryCTE
ORDER BY [C1] ASC