相关疑难解决方法(0)

使用distinct连接列值会得到奇怪的结果

我有一个简单的一列表,有两个值.我选择它并使用distinct修饰符连接值,但它只获取最新值.我对DISTINCT有误解吗?

DECLARE @table TABLE(Id int) 
DECLARE @result VARCHAR(MAX) = ''

INSERT @table VALUES(1), (2)

SELECT 
    @result = @result + CAST( Id AS VARCHAR(10)) + ','
FROM 
    @table

SELECT @result  --— output: 1,2,

-------same With distinct
SET @result = ''

SELECT DISTINCT @result = @result 
        + CAST( Id AS VARCHAR(10)) + ','
FROM @table
SELECT @result  --— expected output: 1,2, actual output: 2,    why?
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server concatenation distinct

5
推荐指数
1
解决办法
103
查看次数

按值分组并根据T-SQL中每个组的点(纬度和经度)创建地理折线

这里也提出了类似的问题:

从T-SQL中的点创建地理折线

进一步提出这个问题,我有一个如下所示的表模式:

CREATE TABLE [dbo].[LongAndLats](
[Longitude] [float] NULL,
[Latitude] [float] NULL,
[SortOrder] [bigint] NULL,
[SensorID] [bigint] NULL,
)
Run Code Online (Sandbox Code Playgroud)

示例数据如下所示:

在此输入图像描述

如何使用TSQL 将这些点转换为每个SensorID的地理折线(以便我为每个SensorID设置SensorID/Polyline记录)?

我尝试过使用db_cursor,但我为每个组获得了一个单独的结果集(我认为这些地理位置可能是相同的).这段代码:

DECLARE @SensorID VARCHAR(2000)
DECLARE @LineFromPoints geography
DECLARE @BuildString NVARCHAR(MAX)

DECLARE db_cursor CURSOR FOR  
SELECT Distinct([SensorId]) 
FROM [dbo].[LongAndLats]

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO LongAndLats 

WHILE @@FETCH_STATUS = 0   
BEGIN   
       SELECT @BuildString = COALESCE(@BuildString + ',', '') + CAST([Longitude] AS NVARCHAR(50)) + ' ' + CAST([Latitude] AS NVARCHAR(50))
       FROM [LongAndLats]
       WHERE SensorID = @SensorID
       ORDER …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server geospatial sqlgeography sqlgeometry

3
推荐指数
1
解决办法
546
查看次数

使用变量 Coalesce 进行排序

我有以下sql命令

DECLARE @cols NVARCHAR (MAX)
SELECT @cols = COALESCE (@cols + ',['+ cast(Month as nvarchar(2))+']' , '['+ Cast(Month as nvarchar(2))+']')
FROM    (select distinct Month from Employee  WHERE  Year*100+Month BETWEEN 201704 and 201712 ) as e
PRINT @cols 
Run Code Online (Sandbox Code Playgroud)

结果是

[9],[12],[6],[7],[10],[4],[5],[11],[8]
Run Code Online (Sandbox Code Playgroud)

但我真的希望它能按排序顺序

[4],[5],[6],[7],[8],[9],[10],[11],[12]
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

1
推荐指数
1
解决办法
387
查看次数

递归变量自赋值有效吗?

我发现了一些 T-SQL 代码,我试图弄清楚它是否是:

\n
    \n
  • 一个我从来不知道的优雅的解决方案
  • \n
  • 一个可怕的令人厌恶的东西碰巧起作用了,绝对应该被移除
  • \n
  • 或介于两者之间。
  • \n
\n

标准化名称

\n

我们有一个要求尝试清理名称:

\n
    \n
  • Bob\xe2\x86\x92Robert
  • \n
  • Bill\xe2\x86\x92William
  • \n
  • Dick\xe2\x86\x92Richard
  • \n
\n

因此创建了一个表来保存该以及将其替换为的值。它包含上述单词(以及更深奥的、特定领域的、特定行业的映射):

\n

填充词

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n
价值用。。。来代替
迪克理查德
账单威廉
鲍勃罗伯特
特德威廉
\n
\n

我看到的用于执行替换的代码要么是天才,要么是疯狂:

\n
DECLARE @firstName varchar(200) = \'bill\';\nSELECT @firstName = REPLACE(@firstName, FillerWords.Value, FillerWords.ReplaceWith) FROM FillerWords;\nSELECT @firstName;\n
Run Code Online (Sandbox Code Playgroud)\n

这使:

\n
(no column name)\n----------------\nWilliam\n\n1 row(s) affected\n
Run Code Online (Sandbox Code Playgroud)\n

更令人印象深刻的是它可以一次进行多个替换: …

t-sql sql-server recursive-query

1
推荐指数
1
解决办法
92
查看次数