将20%的查询结果显示为特定列

时间:2014-06-02 22:24:20

标签: sql-server

您好我是新手(来自法国 - Wines!)的数据库管理:我想显示一个包含每项服务20%结果的报告:我会将此代码放在下面,但是 它什么都没给我:n:

ALTER procedure test
as

BEGIN

Set NOCOUNT ON

DECLARE @Query nvarchar(4000)
DECLARE @CodePrestation nvarchar(50);
set @CodePrestation='select distinct code_prestation FROM vw_Details_Requete_Qualite_oth where code_prestation=613229'
WHILE (@CodePrestation<>'NULL')
BEGIN
   set @Query='select TOP(20)percent[code_prestation],[Libellé Prestation] FROM vw_Details_Requete_Qualite_oth where [code_prestation]='+@CodePrestation;
END
end 
set @Query=@Query
execute sp_executesql @Query

谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

DECLARE @Percent  int
SET @Percent = (SELECT COUNT(*)*0.2 FROM #Test)

SELECT Top (@Percent) * FROM #Test

我希望这会给你你想要的东西。

祝你有个愉快的一天 艾蒂安

<强>更新

有一种更简单的方法:

SELECT TOP(20) PERCENT * From YourTable

答案 1 :(得分:0)

尝试运行此脚本,它会将每个CodePrestation的前20%进行四舍五入:

DECLARE @vw_Details_Requete_Qualite_oth  table
(
  [code_prestation] int,
  [Libellé Prestation] int
)
INSERT @vw_Details_Requete_Qualite_oth
values(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(2,1),(1,2)

;WITH CTE as
(
  SELECT 
    ntile(5) over (PARTITION BY [code_prestation] ORDER BY [Libellé Prestation]) n,
    [code_prestation],
    [Libellé Prestation] 
  FROM @vw_Details_Requete_Qualite_oth 
)
SELECT 
  [code_prestation],
  [Libellé Prestation]
FROM CTE
WHERE n = 1

结果:

code_prestation Libellé Prestation
1               1
1               2
2               1

这不是为您的表编写的,它是作为示例编写的。它应该很容易转换为您的环境。虽然。