【发布时间】:2015-03-23 14:16:46
【问题描述】:
我有一个看起来像这样的表格(出于示例目的,我已将其缩短)
no no19 no68
3387034694344500
3387452540705400
3388486878919450
3371522572594880
3372232397709690
3373608476884750
3382142940562320
3382142940562320
3383084144363070
所以不,no19 和 no68 是 3 个不同的列,但是 'no19' 列中的数据在 'no' 列中的数据结束后的下一行开始。
在这些列之间我有更多的数据,我想创建一个可读的表。我已使用以下代码将这些列合并为一个:
CREATE TABLE MULTICURRENCY_CHECK
(
TOKEN varchar(255)
)
INSERT INTO MULTICURRENCY_CHECK
(
TOKEN
)
SELECT no FROM book1
UNION ALL
SELECT no19 FROM book1
UNION ALL
SELECT no68 FROM book1
问题是,我得到的结果是这样的:
TOKEN
3387034694344500
3387452540705400
3388486878919450
3371522572594880
3372232397709690
3373608476884750
3382142940562320
3382142940562320
3383084144363070
所以在 TOKEN 列之间有空白行。我试图删除它们,但它通过简单的删除命令但它不起作用(尝试了下面的这两个):
delete from multicurrency_check where TOKEN = ' '
delete from multicurrency_check where TOKEN is NULL
也许我应该以不同的方式处理这张桌子,也许更快?因为原始表看起来像这些(只是示例数据)
no a b no19 c d no68
3387034694344500 data1 data4
3387452540705400 data2 data5
3388486878919450 data3 data6
3371522572594880 data7 data10
3372232397709690 data8 data11
3373608476884750 data9 data12
3382142940562320
3382142940562320
3383084144363070
所以我最后想要的是这样的表格:
| TOKEN | a | b | c | d
其中 token 是 no、no19 和 no68 的合并,然后是 a、b、c、d 列,其数据与来自 TOKEN 列的适当 id 匹配(a、b、c、d 可以为 null)
【问题讨论】:
-
我不明白问题的第二部分。但是,您可以通过以下查询删除“空”记录:DELETE FROM multicurrency_check where COALESCE(RTRIM(LTRIM(TOKEN)),'') = '';
-
对于给定的数据,你能用预期的转换填充结果表吗?
-
好的,它正在与 COALESCE 合作(不太了解 transact-sql)。我想我会处理剩下的,现在只是加入表格的问题。
标签: sql sql-server syntax