sql根据三列值生成代码

时间:2017-10-16 12:42:19

标签: sql tsql

我有三列 假设

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'

4 个答案:

答案 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等等。

<强>结果

enter image description here

答案 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'。]