SQL Server:获取列中最长值的大小,并将列名包含在该总数中
我有一个查询,返回它在该列中找到的最长单词的数目:SQL Server:获取列中最长值的大小,并将列名包含在该总数中,sql,sql-server,reporting-services,ssrs-2016,Sql,Sql Server,Reporting Services,Ssrs 2016,我有一个查询,返回它在该列中找到的最长单词的数目: SELECT MAX(LEN(id)) AS id, MAX(LEN(linkToTbl2)) AS linkToTbl2, MAX(LEN(description)) AS description, MAX(LEN(number)) AS number, MAX(LEN(line)) AS line, MAX(LEN(network)) AS network, MAX(LE
SELECT
MAX(LEN(id)) AS id,
MAX(LEN(linkToTbl2)) AS linkToTbl2,
MAX(LEN(description)) AS description,
MAX(LEN(number)) AS number,
MAX(LEN(line)) AS line,
MAX(LEN(network)) AS network,
MAX(LEN(type)) AS type,
MAX(LEN(IPhase)) AS IPhase,
MAX(LEN(environment)) AS environment,
MAX(LEN(sType)) AS sType,
MAX(LEN(bDescription)) AS bDescription
FROM
bLine
但是,如果所述列小于该列的标题,则在计算最大值时不考虑该标题
示例(我希望做的事情):
在示例查询中如下所示:
|id |linkToTbl2 |description |
+---+-----------+------------+
|2 |10 |25 |
现在这就是我的SSRS报告中当前的情况:
|id |lin|description |
| |kTo| |
| |tbl| |
| |2 | |
|---|---|-------------------------|
|14 |hi |This is just a demo. |
|16 |baa|Another description here.|
这在查询中看起来像这样:
|id |linkToTbl2 |description |
|---|-----------|------------|
|2 |3 |25 |
请注意linkToTbl2
字段是如何压缩的,因为该列中的最长值是3(baa)linkToTbl2
将是10(linkToTbl2),因此它应该是10而不是3
如何将列名添加到查询中以同时计算?如果列都是字符串,则可以使用蛮力:
select . . .
from ((select id, linkToTbl2, . . . from bLine) union all
(select 'id', 'linkToTbl2', . . .)
) b;
在SQL中采用的任何方法都需要列出所有列名。我认为这最好在应用层完成。您可以使用
UNPIVOT
和PIVOT
DECLARE @MyTable TABLE (id INT, linkToTbl2 VARCHAR(100), description VARCHAR(100))
INSERT INTO @MyTable VALUES
(14,'hi','This is just a demo.'),
(16,'baa','Another description here.')
SELECT * FROM
( SELECT
Col,
MAX(CASE WHEN LEN(Val) > LEN(Col) THEN LEN(Val) ELSE LEN(Col) END) LEN_OF_COL
FROM
( SELECT
CONVERT(VARCHAR(MAX),[Id]) [Id],
CONVERT(VARCHAR(MAX),[linkToTbl2]) [linkToTbl2],
CONVERT(VARCHAR(MAX),[description]) [description]
FROM @MyTable ) SRC
UNPIVOT (Val FOR Col IN( [Id], [linkToTbl2], [description] ) ) UNPVT
GROUP BY Col ) T
PIVOT( MAX(LEN_OF_COL) FOR Col IN ( [Id], [linkToTbl2], [description] ) ) PVT
结果:
Id linkToTbl2 description
----------- ----------- -----------
2 10 25
您不能在应用程序级别执行此操作吗?这似乎更简单。@GordonLinoff这样做更容易,但在我目前的情况下,最好通过查询来完成。我使用UNION、INTERSECT或EXCEPT运算符组合所有查询,它们的目标列表中必须有相同数量的表达式。@StealthRT。然后显式列出列。我得到了这个错误:列“linkToTbl2”的类型与UNPIVOT列表中指定的其他列的类型冲突。所有列都应该是相同的类型。我做了一个更新就是这样做的。谢谢你的帮助,塞尔坎!我想知道为什么您需要这个,而原始查询不起作用?@JuanCarlosOropeza它起作用,但不考虑计数中的列名称。
Id linkToTbl2 description
----------- ----------- -----------
2 10 25