我有一个简单的一列表,有两个值.我选择它并使用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) 这里也提出了类似的问题:
进一步提出这个问题,我有一个如下所示的表模式:
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) 我有以下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) 我发现了一些 T-SQL 代码,我试图弄清楚它是否是:
\n我们有一个要求尝试清理名称:
\nBob\xe2\x86\x92RobertBill\xe2\x86\x92WilliamDick\xe2\x86\x92Richard因此创建了一个表来保存该值以及将其替换为的值。它包含上述单词(以及更深奥的、特定领域的、特定行业的映射):
\n填充词:
\n| 价值 | 用。。。来代替 |
|---|---|
| 迪克 | 理查德 |
| 账单 | 威廉 |
| 鲍勃 | 罗伯特 |
| 特德 | 威廉 |
我看到的用于执行替换的代码要么是天才,要么是疯狂:
\nDECLARE @firstName varchar(200) = \'bill\';\nSELECT @firstName = REPLACE(@firstName, FillerWords.Value, FillerWords.ReplaceWith) FROM FillerWords;\nSELECT @firstName;\nRun Code Online (Sandbox Code Playgroud)\n这使:
\n(no column name)\n----------------\nWilliam\n\n1 row(s) affected\nRun Code Online (Sandbox Code Playgroud)\n更令人印象深刻的是它可以一次进行多个替换: …