Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 2005 跳过后续行中相同值的输出_Sql Server 2005 - Fatal编程技术网

Sql server 2005 跳过后续行中相同值的输出

Sql server 2005 跳过后续行中相同值的输出,sql-server-2005,Sql Server 2005,朋友 我希望使用tbale tblABC的sql查询获得以下类型的输出 OUTPUT ====== SrNo. Date BillNo Amount ================================================= 1 10-02-2012 VAT-1 1200.00 2

朋友

我希望使用tbale tblABC的sql查询获得以下类型的输出

  OUTPUT
  ======

  SrNo.         Date               BillNo            Amount
  =================================================
     1         10-02-2012            VAT-1            1200.00
     2                               RET-4              50.00
     3                               RET-5             150.50
     4         11-02-2012            VAT-2            1500.00
     5                               RET-6            2505.00
     6         12-02-2012            VAT-3              05.00
从包含以下数据的表中

     tblABC
     ======

     SrNo.         Date               BillNo            Amount
     =================================================
     1         10-02-2012            VAT-1            1200.00
     2         10-02-2012            RET-4              50.00
     3         10-02-2012            RET-5             150.50
     4         11-02-2012            VAT-2            1500.00
     5         11-02-2012            RET-6            2505.00
     6         12-02-2012            VAT-3              05.00
我想要的输出和表之间的区别是 输出我不想要日期报告,因为它在表中


请帮助我如何获得它。

select语句中的用例关键字。

如果上次输出时显示了代码?为什么需要SQL Server为您保留此值?您的客户端应用程序在显示数据时必须逐行循环,您的客户端应用程序不能跟踪最后一个值,如果当前值相同,就不显示它吗?选择SrNo、BillNo、Credit,由于TBABC会导致报告缓慢,所以在大量数据的情况下,LOOP会花费大量时间。这不是一个非常有用的答案。你能解释一下简单地在选择列表中添加一个case表达式会有什么帮助吗?嗨,亚伦,你的答案是对的,但我执行查询时无法得到rn(RowNumber),然后在输出rn中从1开始计数,直到它没有得到不同的日期。我不明白它(rn)是如何再次从1开始为下一个日期窗口函数使用分区(分组)和排序(排名)来分配数字。在英语中,取所有日期相同的行,然后根据SrNo的值分发1、2、3等。现在重复下一个不同的日期。在输出中,我们只是有条件地显示它们在分组中“第一个”的日期。
DECLARE @tblABC TABLE
(
    SrNo INT, [Date] DATETIME, BillNo CHAR(5), Amount DECIMAL(10,2)
);

INSERT @tblABC SELECT 1,'20120210','VAT-1',1200.00
UNION ALL SELECT 2,'20120210','RET-4',50.00
UNION ALL SELECT 3,'20120210','RET-5',150.50
UNION ALL SELECT 4,'20120211','VAT-2',1500.00
UNION ALL SELECT 5,'20120211','RET-6',2505.00
UNION ALL SELECT 6,'20120212','VAT-3',05.00;

;WITH x AS 
(
  SELECT SrNo, [Date] = REPLACE(CONVERT(CHAR(10), [Date], 103), '/', '-'), 
    BillNo, Amount, rn = ROW_NUMBER() OVER (PARTITION BY [Date] ORDER BY SrNo)
    FROM @tblAbC
)
SELECT SrNo, [Date] = CASE rn WHEN 1 THEN [Date] ELSE '' END, BillNo, Amount
  FROM x 
  ORDER BY SrNo;