我在表1中有两列Col1和Col2。如果2行Col1的值为“C,B”和& “A,B”和2行Col2的值为“ASC”& “DES”,我需要输出两行,顺序为“ADES,B”和& “CASC,B”(即;应根据第一个值进行分类)。
Col1值应该基于逗号分隔,它应该与Col2值组合,输出应该按照第一个值排序。
我有一个字符串拆分功能如下:
ALTER FUNCTION [dbo].[SplitString](@String nvarchar(4000), @Delimiter char(1))
returns @temptable TABLE (items nvarchar(4000))
as
begin
declare @idx int
declare @slice nvarchar(4000)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end
输入列示例值:
Col1 Col2
C,B ASC
A,B DES
渴望的Ouptut:
Output
ADES,B
CASC,B
任何人请帮忙以获得所需的输出。
答案 0 :(得分:1)
SELECT *
, LEFT(Co1,CHARINDEX(',',Co1)-1)
+ Col2
+ SUBSTRING(Co1,CHARINDEX(',',Co1),256) AS Result
FROM Table1
ORDER BY Result
将256替换为列的长度或任何更大的值
修改强>
更好的是,使用STUFF
函数:
SELECT *, STUFF(Co1,CHARINDEX(',',Co1),0,Col2) AS Result
FROM Table1
ORDER BY Result
<强> SQLFiddle DEMO 强>
答案 1 :(得分:0)
CREATE TABLE Table1
([Col1] varchar(3), [Col2] varchar(3))
;
INSERT INTO Table1
([Col1], [Col2])
VALUES
('C,B', 'ASC'),
('A,B', 'DES')
;
**Query 1**:
SELECT
left(Col1,1) + col2 AS colA
, right(col1,1) AS colb
FROM table1
ORDER BY
colA
, colB
**[Results][2]**:
| COLA | COLB |
|------|------|
| ADES | B |
| CASC | B |
[1]: http://sqlfiddle.com/#!3/e9dbd/2