我正在尝试从表中获取数据并将信息分成临时表中的两列,但是我遇到了麻烦。让我解释一下。
table : a
+-------+-----------+-----------+
| ID | Type | Word |
+-------+-----------+-----------+
| 1 | Fr | Wee |
| 1 | Eng | Yes |
| 2 | Fr | Non |
| 2 | Eng | No |
| 3 | Fr | Bien |
| 3 | Eng | Good |
+-------+-----------+-----------+
我有上面的表,我想将单词数据插入到临时表中,但我想将其拆分为法语单词和英语单词。我已经使用了以下内容。
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 |
+-------+-----------+-----------+
理想情况下,我希望它们并排放置。
有什么提示吗?
如果需要更多信息,请询问。
答案 0 :(得分:3)
一种方法是条件聚合:
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;
答案 1 :(得分:2)
使用条件聚合:
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
答案 2 :(得分:1)
使用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