SQL 将数据插入临时文件 table,拆分列
SQL inserting data into a temp table, splitting a column
我正在尝试从 table 获取数据并将信息拆分为临时 table 中的两列,但我遇到了一些麻烦。让我解释一下。
table : a
+-------+-----------+-----------+
| ID | Type | Word |
+-------+-----------+-----------+
| 1 | Fr | Wee |
| 1 | Eng | Yes |
| 2 | Fr | Non |
| 2 | Eng | No |
| 3 | Fr | Bien |
| 3 | Eng | Good |
+-------+-----------+-----------+
我有上面的 table 并且我想将单词数据插入临时文件 table 但我想将其拆分为法语单词和英语单词。我用过以下。
CREATE TABLE #translation
(
French NVARCHAR(50),
English NVARCHAR(50)
)
INSERT INTO #translation (French)
SELECT Word FROM a
WHERE Type = 'Fr'
INSERT INTO #translation (English)
SELECT Word FROM a
WHERE Type = 'Eng'
这种工作但产生:
+-------+-----------+-----------+
| Row | French | English |
+-------+-----------+-----------+
| 1 | Wee | NULL |
| 2 | Non | NULL |
| 3 | Bien | NULL |
| 4 | NULL | Yes |
| 5 | NULL | No |
| 6 | NULL | Good |
+-------+-----------+-----------+
理想情况下,我希望它们并排。
对此有什么建议吗?
如果需要更多信息,请询问。
一种方法是条件聚合:
INSERT INTO #translation (French, English)
SELECT MAX(CASE WHEN Type = 'FR' THEN Word END),
MAX(CASE WHEN Type = 'EN' THEN Word END)
FROM a
GROUP BY id;
使用条件聚合:
select id, max(case when Type = 'Fr' then word end) as French,
max(case when Type = 'Eng' then word end) as English
from table1
group by id
使用Pivot
将行转为列
架构:
CREATE TABLE #ACTUAL(ID INT, Type Varchar(10), Word Varchar(10))
INSERT INTO #ACTUAL
SELECT 1,'Fr' ,'Wee'
UNION ALL
SELECT 1,'Eng','Yes'
UNION ALL
SELECT 2,'Fr' ,'Non'
UNION ALL
SELECT 2,'Eng','No'
UNION ALL
SELECT 3,'Fr' ,'Bien'
UNION ALL
SELECT 3,'Eng','Good'
查询:
SELECT *
FROM #ACTUAL A
PIVOT
(
MAX(Word) FOR Type IN ([Fr],[Eng] )
)PV
结果
ID Fr Eng
----------------
1 Wee Yes
2 Non No
3 Bien Good
我正在尝试从 table 获取数据并将信息拆分为临时 table 中的两列,但我遇到了一些麻烦。让我解释一下。
table : a
+-------+-----------+-----------+
| ID | Type | Word |
+-------+-----------+-----------+
| 1 | Fr | Wee |
| 1 | Eng | Yes |
| 2 | Fr | Non |
| 2 | Eng | No |
| 3 | Fr | Bien |
| 3 | Eng | Good |
+-------+-----------+-----------+
我有上面的 table 并且我想将单词数据插入临时文件 table 但我想将其拆分为法语单词和英语单词。我用过以下。
CREATE TABLE #translation
(
French NVARCHAR(50),
English NVARCHAR(50)
)
INSERT INTO #translation (French)
SELECT Word FROM a
WHERE Type = 'Fr'
INSERT INTO #translation (English)
SELECT Word FROM a
WHERE Type = 'Eng'
这种工作但产生:
+-------+-----------+-----------+
| Row | French | English |
+-------+-----------+-----------+
| 1 | Wee | NULL |
| 2 | Non | NULL |
| 3 | Bien | NULL |
| 4 | NULL | Yes |
| 5 | NULL | No |
| 6 | NULL | Good |
+-------+-----------+-----------+
理想情况下,我希望它们并排。
对此有什么建议吗?
如果需要更多信息,请询问。
一种方法是条件聚合:
INSERT INTO #translation (French, English)
SELECT MAX(CASE WHEN Type = 'FR' THEN Word END),
MAX(CASE WHEN Type = 'EN' THEN Word END)
FROM a
GROUP BY id;
使用条件聚合:
select id, max(case when Type = 'Fr' then word end) as French,
max(case when Type = 'Eng' then word end) as English
from table1
group by id
使用Pivot
将行转为列
架构:
CREATE TABLE #ACTUAL(ID INT, Type Varchar(10), Word Varchar(10))
INSERT INTO #ACTUAL
SELECT 1,'Fr' ,'Wee'
UNION ALL
SELECT 1,'Eng','Yes'
UNION ALL
SELECT 2,'Fr' ,'Non'
UNION ALL
SELECT 2,'Eng','No'
UNION ALL
SELECT 3,'Fr' ,'Bien'
UNION ALL
SELECT 3,'Eng','Good'
查询:
SELECT *
FROM #ACTUAL A
PIVOT
(
MAX(Word) FOR Type IN ([Fr],[Eng] )
)PV
结果
ID Fr Eng
----------------
1 Wee Yes
2 Non No
3 Bien Good