【问题标题】:Join data from two tables to a single entry in 1 table将两个表中的数据连接到 1 个表中的单个条目
【发布时间】:2019-03-05 11:16:21
【问题描述】:

早安

我希望你能提供帮助。我已经设法在 Access 中实现了这一点,但在 SQL 中似乎失败了。

我目前的工作

在 Access 中,我创建了 1 个带有 2 个表的数据库:

  • 数据库名称“所有投资组合 - 总值”
  • 列名称:ID、value_date、external_ref、portfolio_name、value
  • 数据库名称“VAL_File_Concatenate”
  • 列名:value_date、external_ref、wrapper_name、model、value

在 Access 中的工作原理是将文本文件导入 VAL_File_Concatenate,然后执行以下代码:

INSERT INTO [All Portfolios - Total Values] ( value_date, external_ref, portfolio_name, [value] ) IN 'PATH TO DB'

SELECT [Val_File_Concatenate].value_date, [Val_File_Concatenate].external_ref, [Val_File_Concatenate] [Wrapper_Name] & " - " & [Model] AS portfolio_name, Sum([Val_File_Concatenate].value) AS SumOfvalue
FROM [Val_File_Concatenate]

GROUP BY [Val_File_Concatenate].value_date, [Val_File_Concatenate].external_ref, [Wrapper_Name] & " - " & [Model]

HAVING ((([Val_File_Concatenate].value_date) Is Not Null));

这会将 VAL_File_Concatenate 中的值复制到 All_Portfolios - Total Values 中的相关字段,但将 Wrapper_Name 和 Model 合并到 All Portfolio - Total Values 表中的 Portfolio_Name 字段中,并以“-”作为分隔符。

作为参考,VAL_File_Concatenate 如下所示:

Value_Date     External_Ref       Wrapper_Name       Model         Value
2019-03-01      Xxxxxxx/x          GIA - Cash       Liquidity      0.165

ALL Portfolio - Total Values DB 中的 Access 输出为:

Value_Date     External_Ref      Portfolio_Name            Value
2019-03-01      Xxxxxxx/x       GIA – Cash - Liquidity     0.165

我正在努力实现的目标

我已将数据库迁移到 SQL Server 2008,带有 2 个表的单个数据库。我正在努力解决的是通过合并 VAL_File_Concatenate 中的 Wrapper_Name 和 Model 字段在所有投资组合中创建 Portfolio_Name - Total Values 的查询部分。

非常感谢您提供的任何帮助。我尝试了各种方法,但似乎无法克服错误。

迈克

【问题讨论】:

  • 嗨,戈登,它被标记为 SQL,这是我正在使用的数据库,但我添加了 SQL-Server-2008 和 Access。谢谢你的建议
  • @Shattered:“SQL”是一种查询语言,而不是数据库产品。每个关系数据库都是一个“SQL 数据库”。那么您使用的是什么? SQL Server 还是 MS Access?
  • SQL Server,我只是表示我在正在迁移到 SQL 的 Access 中工作。我使用的是 SQL 2008。所有命令都在 SQL 2008 中运行
  • @a_horse_with_no_name 为了清楚起见,我已经编辑过,希望不会引起进一步的混乱:)

标签: sql tsql sql-server-2008


【解决方案1】:

在 sql server 中你可以使用 + 代替 &

    INSERT INTO [All Portfolios - Total Values] ( value_date, external_ref, portfolio_name, [value] ) IN 'PATH TO DB'

    SELECT [Val_File_Concatenate].value_date
        , [Val_File_Concatenate].external_ref
        , [Val_File_Concatenate].[Wrapper_Name] + ' - ' + [Model] AS portfolio_name
        , Sum([Val_File_Concatenate].value) AS SumOfvalue
    FROM [Val_File_Concatenate]

    GROUP BY [Val_File_Concatenate].value_date, [Val_File_Concatenate].external_ref, [Wrapper_Name] + " - " +  [Model]

    HAVING ((([Val_File_Concatenate].value_date) Is Not Null));

【讨论】:

  • 嗨,我尝试使用 + 代替 & 但收到以下错误:消息 102,级别 15,状态 1,第 6 行 '+' 附近的语法不正确。消息 102,级别 15,状态 1,第 12 行“Val_File_Concatenate”附近的语法不正确。
  • 您在 wrapper_name 答案更新之前漏掉了一个点
  • 很好,现在我收到:消息 207,第 16 级,状态 1,第 9 行无效的列名“-”。消息 207,级别 16,状态 1,第 5 行无效的列名“-”。
  • 答案已更新 .. 尝试使用单引号而不是双引号
  • 也试过了,但我收到:Msg 8152, Level 16, State 13, Line 1 字符串或二进制数据将被截断。声明已终止。
【解决方案2】:

在标准 SQL 中,查询看起来更像这样:

INSERT INTO <path to db>.[All Portfolios - Total Values] ( value_date, external_ref, portfolio_name, value )
    SELECT c.value_date, 
           c.external_ref,
           CONCAT(c.[Wrapper_Name], '-', [Model]) AS portfolio_name,
            Sum(c.value) AS SumOfvalue
    FROM Val_File_Concatenate c
    WHERE c.value_date Is Not Null
    GROUP BY c.value_date, c.external_ref, CONCAT(c.[Wrapper_Name], '-', [Model]);

MS Access 使用非标准语法。您的最终查询应如下所示。

【讨论】:

  • Gordon,我收到以下错误:消息 102,级别 15,状态 1,第 4 行 'Wrapper_Name' 附近的语法不正确。
【解决方案3】:

你可以试试这个。

INSERT INTO [All Portfolios - Total Values] ( value_date, external_ref, portfolio_name, [value] ) 
SELECT 
    [Val_File_Concatenate].value_date, 
    [Val_File_Concatenate].external_ref,
    [Val_File_Concatenate].[Wrapper_Name] + ' - ' + [Val_File_Concatenate].[Model] AS portfolio_name, 
    Sum([Val_File_Concatenate].value) AS SumOfvalue
FROM 
    [Val_File_Concatenate]
WHERE 
    [Val_File_Concatenate].value_date Is Not Null
GROUP BY 
    [Val_File_Concatenate].value_date, 
    [Val_File_Concatenate].external_ref, 
    [Val_File_Concatenate].[Wrapper_Name] + ' - ' + [Val_File_Concatenate].[Model] 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多