我有三列 假设
row no column1 column2 column3
1 A B C
2 A B C
3 D E F
4 G H I
5 G H C
我想通过组合这三个列值来生成代码 对于Eg。
1)ABC001
2)ABC002
3)DEF001
4)GHI001
5)GHC001
通过检查三列的组合
逻辑就是这样 如果三列的值相同,那么就像第一次显示'ABC001' 第二次显示'ABC002'
答案 0 :(得分:2)
你可以试试这个:
我不知道你对00的逻辑想要什么,但是你可以添加manuel或让rn为你决定
declare @mytable table (rowno int,col1 nvarchar(50),col2 nvarchar(50),col3 nvarchar(50)
)
insert into @mytable
values
(1,'A', 'B', 'C'),
(2,'A', 'B', 'C'),
(3,'D', 'E', 'F'),
(4,'G', 'H', 'I'),
(5,'G', 'H', 'C')
Select rowno,col1,col2,col3,
case when rn >= 10 and rn < 100 then concatcol+'0'+cast(rn as nvarchar(50))
when rn >= 100 then concatcol+cast(rn as nvarchar(50))
else concatcol+'00'+cast(rn as nvarchar(50)) end as ConcatCol from (
select rowno,col1,col2,col3
,Col1+col2+col3 as ConcatCol,ROW_NUMBER() over(partition by col1,col2,col3 order by rowno) as rn from @mytable
) x
order by rowno
我的情况是确保当你点击10号时写入ABC010,当它达到100以上时它会写ABC100否则如果它低于10它会写ABC001等等。
<强>结果强>
答案 1 :(得分:0)
TSQL:CONCAT(column1,column2,column3,RIGHT(REPLICATE(&#34; 0&#34;,3)+ LEFT(row_no,3),3))
答案 2 :(得分:0)
您应该按照以下方式组合列:
SELECT CONVERT(VARCHAR(MAX), ROW_NUMBER() OVER(ORDER BY
(
SELECT NULL
)))+') '+DATA AS Data
FROM
(
SELECT column1+column2+column3+'00'+CONVERT(VARCHAR(MAX), ROW_NUMBER() OVER(PARTITION BY column1,
column2,
column3 ORDER BY
(
SELECT NULL
))) DATA
FROM <table_name>
) T;
结果:
1)ABC001
2)ABC002
3)DEF001
4)GHI001
5)GHC001
答案 3 :(得分:-1)
MySQL的: CONCAT(column1,column2,column3,LPAD(row_no,3,'0'))
[如果字段名称中有空格而不是下划线,则需要在刻度中包含'row no'。]