Sql 如何获取上一行文本
首先:我是SQL初学者,我使用SQL Server 2008 现在的表格写为: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
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
是PKnvarchar
(可能看起来像N0890
),其中最后的数字随着每个新人+1的增加而增加
art\u ID
(交易)为PKsmallint
,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上打印,然后你就不能做更多的事情了。这取决于最终用户。