【问题标题】:SQL inserting data into a temp table, splitting a columnSQL将数据插入临时表,拆分列
【发布时间】:2018-09-18 10:39:52
【问题描述】:

我正在尝试从表中获取数据并将信息拆分为临时表中的两列,但我遇到了一些问题。让我解释一下。

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

理想情况下,我希望它们并排。

对此有什么建议吗?

如果需要更多信息,请询问。

【问题讨论】:

  • 顺便说一句,这是“Oui”而不是“Wee”

标签: sql sql-server sql-insert temp


【解决方案1】:

一种方法是条件聚合:

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;

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

      使用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
      

      【讨论】:

        猜你喜欢
        • 2016-07-17
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-02
        • 1970-01-01
        相关资源
        最近更新 更多