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 如何获取上一行文本_Sql_Sql Server 2008_Row - Fatal编程技术网

Sql 如何获取上一行文本

Sql 如何获取上一行文本,sql,sql-server-2008,row,Sql,Sql Server 2008,Row,首先:我是SQL初学者,我使用SQL Server 2008 现在的表格写为: SELECT Transaction.description, Person.name FROM Transaction, Person, SystemUser WHERE Person.personnumber = SystemUser.personnumber AND Transaction.art_ID = SystemUser.art_ID ORDER BY

首先:我是SQL初学者,我使用SQL Server 2008

现在的表格写为:

SELECT 
    Transaction.description, Person.name 
FROM 
    Transaction, Person, SystemUser
WHERE 
    Person.personnumber = SystemUser.personnumber 
    AND Transaction.art_ID = SystemUser.art_ID 
ORDER BY 
    Transaction.description
其中,
personnumber
是PK
nvarchar
(可能看起来像
N0890
),其中最后的数字随着每个新人+1的增加而增加

art\u ID
(交易)为PK
smallint
art\u ID
(系统用户)为
smallint
说明
nvarchar

我想从同一列中的前一行中获取文本,这样我就可以将文本处理得更清晰,并使结果表看起来更简单

现在的例子是:

|Transactions       | Persons  |
|-------------------|----------|
|Statistic          | Ursula   |
|Statistic          | Peter    |
|Statistic          | Alan     |
|Settlement         | Christie |
|Settlement         | Tania    |
|Deptor department  | Jack     |
|Economy department | Rickie   |
|Economy department | Annie    |
|Economy department | Tom      |
|Economy department | Seth     |
我希望它是怎样的:

|Transactions       | Persons  |
|-------------------|----------|
|Statistic          | Ursula   |
|                   | Peter    |
|                   | Alan     |
|Settlement         | Christie |
|                   | Tania    |
|Deptor department  | Jack     |
|Economy department | Rickie   |
|                   | Annie    |
|                   | Tom      |
|                   | Seth     |
如选择描述=描述-1行时的情况,则为“”

我搜索了一些示例,其中每一个都基于整数,而不是varchar/nvarchar),当我尝试使用
varchars
时,总是会出错。例如使用CTE、min()和max()


您是否知道我可以使用什么函数,或者如何设置select语句来执行我想要的操作?

首先使用秩函数来识别其中一个函数:

SELECT Transaction.description, Person.name,
RANK() OVER (PARTITION BY Transaction.description ORDER BY Person.name) As R
FROM Transaction, Person, SystemUser
WHERE Person.personnumber = SystemUser.personnumber 
AND Transaction.art_ID = SystemUser.art_ID 
ORDER BY Transaction.description, Person.name
注意到你想要看到的线有1对它们吗?使用以下命令:

SELECT 
CASE WHEN R=1 THEN Transaction.description ELSE '' END description, 
Person.name
FROM 
(
SELECT Transaction.description, Person.name,
RANK() OVER (PARTITION BY Transaction.description ORDER BY Person.name) As R
FROM Transaction, Person, SystemUser
WHERE Person.personnumber = SystemUser.personnumber 
AND Transaction.art_ID = SystemUser.art_ID 
) Subtable
ORDER BY Transaction.description,  Person.name   

我认为下面的SQL应该可以工作

CREATE TABLE #TempTable (rowrank INT, description VARCHAR(256), name VARCHAR(256));

INSERT INTO #TempTable (rowrank, description, name)
VALUES

Select RANK() OVER (ORDER BY Transaction.description)
    ,Transaction.description
    ,name
FROM Transaction, Person, SystemUser
WHERE Person.personnumber = SystemUser.personnumber 
AND Transaction.art_ID = SystemUser.art_ID 
ORDER BY Transaction.description

SELECT 
CASE 
    WHEN prev.RANK = TT.RANK
        THEN ""
    ELSE TT.Description 
END AS Description,
name 

FROM #TempTable TT
LEFT JOIN #TempTable prev ON prev.rownum = TT.rownum - 1

这通常是在“表示”层中完成的。你是如何向用户展示这一点的?在Excel中?-旧样式的逗号分隔表列表样式不应再使用,而是建议使用ANSI-92 SQL标准(20多年前)引入的正确ANSI连接语法。实际上,我使用的是在线系统。在该系统中,有一个部分,您可以选择并打印报告。作为一名程序员,我可以去那里编辑报告。但它是有限的,因为它不清楚sql server程序,它是一个工具,您可以在其中选择要使用的表,将它们链接在一起,然后选择要使用的字段并添加一些约束。不能创建同一表的另一个实例。你可以选择在html、pdf和excel上打印,然后你就不能做更多的事情了。这取决于最终用户。