我是sql的新手,我必须完成以下任务:
我有两张桌子:
表1
| Nr | Binary |
---------------------------
| 1 | 111111111011010 |
| 2 | 111111111011110 |
| 3 | ... |
表2
| Nr |
--------
| 1 |
| 1 |
| 1 |
| 1 |
| 1 |
| 2 |
| 2 |
| 2 |
| 3 |
| ... |
我想改变Table2(或创建一个新表),所以它看起来像这样:
| Nr | Binary |
-----------------
| 1 | 0 |
| 1 | 1 |
| 1 | 0 |
| 1 | 1 |
| 1 | 1 |
| 2 | 0 |
| 2 | 1 |
| 2 | 1 |
| ... | ... |
说明:
表2有4次" 1"在专栏" Nr" - >子串化Table1列的最后4位"二进制" Row" 1"并在Table2列二进制文件中逐行插入,其中" Nr"也是1
表2有3倍" 2"在专栏" Nr" - >子串化Table1列的最后3位"二进制" Row" 2"并在Table2列二进制文件中逐行插入,其中" Nr"也是1
有什么建议吗?提前谢谢!
答案 0 :(得分:1)
请参阅随附的代码。我只使用了数字1
和2
,但它的作用一般:)
declare @table1 table (nr int, [binary] varchar(30))
insert into @table1 values (1, '111111111011010'), (2, '111111111011110')
declare @table2 table (nr int)
insert into @table2 values (1),(1),(1),(1),(1),(2),(2),(2)
select A.nr,
SUBSTRING(B.[binary], LEN(B.[binary]) - A.rownum + 1, 1) AS [bit]
from (select rownum = row_number() over(partition by nr order by nr), nr from @table2) AS A
join @table1 AS B on A.nr = B.nr