我有一个TableA列是(id,name,A,B,C,p_id)
我想将TableA转换为TableB,TableB列为(id,name,alphabets,alphabets_value,p_id)
package main
import (
"log"
"os/exec"
"path/filepath"
)
func main() {
fname, err := exec.LookPath("go")
if err == nil {
fname, err = filepath.Abs(fname)
}
if err != nil {
log.Fatal(err)
}
log.Println(fname)
}
id | name | A | B | C | p_id
1 | xyz | a | b | | 1
2 | opq | a`| b`| c`| 1
我想要当前使用Microsoft SQL的TableB输出
答案 0 :(得分:2)
这是一个关键点,可能最容易由UNION ALL解释:
SELECT id, name, 'A' as alphabets, a as alphabets_value, p_id
UNION ALL
SELECT id, name, 'B' as alphabets, b as alphabets_value, p_id
UNION ALL
SELECT id, name, 'C' as alphabets, c as alphabets_value, p_id
然后您可以在此处从中删除空值,并在ROW_NUMBER处给自己一个伪造的U_id:
SELECT ROW_NUMBER() OVER(ORDER BY id, alphabets) as u_id, x.*
FROM
(
SELECT id, name, 'A' as alphabets, a as alphabets_value, p_id
UNION ALL
SELECT id, name, 'B' as alphabets, b as alphabets_value, p_id
UNION ALL
SELECT id, name, 'C' as alphabets, c as alphabets_value, p_id
)
WHERE
x.alphabets_value IS NOT NULL
一旦获得所需的结果集,将其插入表B的INSERT INTO,UPDATE FROM或MERGE就是不重要的