SQL вставляет данные во временную таблицу, разбивая столбец - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь получить данные из таблицы и разделить информацию на два столбца во временной таблице, но у меня возникла проблема с этим.Позвольте мне объяснить.

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    |
+-------+-----------+-----------+

В идеале я хочу, чтобы они были рядом.

Есть какие-нибудь советы для этого?

Если вам нужна дополнительная информация, пожалуйста, спросите.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Использовать условное аггрегирование:

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
0 голосов
/ 18 сентября 2018

Используйте 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
0 голосов
/ 18 сентября 2018

Один метод условного агрегирования:

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;
...