【问题标题】:Select query on the columns when the column names are retrieved as another query?当列名作为另一个查询检索时,选择列上的查询?
【发布时间】:2020-05-19 16:28:20
【问题描述】:

我正在 SQL Server 中创建一个数据库查询,以检索与合同对应的所有合同项目详细信息。

  1. 合同将在 CONTRACT_ITEM 表中存储多个项目。 (1:N)

  2. 某些合同项目将在税表中存储与其关联的税。 (1:1)

  3. 某些合同项目将具有关联的税表列。此列名称可以通过单独的选择查询(例如 SELECT1)找到,并且对于所有合同项目都是相同的。例如,一个客户是“c1”,另一个客户是“c2”,但每个客户都有自己的一组表。

  4. 第 3 步中标识的列(即“c1”)将存储 AMAZ_ID。

为了获取合同的合同项目详细信息,我编写了以下查询。但不清楚如何检索每个Contract_Item的AMAZ_CODE

select ci.contract_item_id, tax.tax_id 
from contract_item ci
join contract cc on cc.contract_id = ci.contract_id
left join tax on ci.tax_id = tax.tax_id
where cc.contract_id = 1234

现在假设 SELECT1 返回 c1 ,那么对于每个 contract_item 还需要运行以下查询并包含在合同项目详细信息中。

下面的查询也需要强制转换选择

select amaz_code 
from amaz aa 
where aa.amaz_id = (select cast(c1 as int)  from contract_item_tax_form)

能否指出如何为每个合同项包含 AMAZ_CODE ?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您似乎正在寻找outer apply

    这应该让你接近你所追求的。

    SELECT ci.contract_item_id,
           tx.tax_id,
           tf.amaz_code
    FROM contract_item ci
        JOIN Contract cc
            ON cc.contract_id = ci.contract_id
        LEFT JOIN Tax tx
            ON ci.tax_id = tx.tax_id
        LEFT JOIN contract_item_tax_form cift
            ON cift.contract_item_id = ci.contract_item_id
        OUTER APPLY
    (
        SELECT TOP (1)
               amaz_code
        FROM amaz aa
        WHERE aa.amaz_id = cift.c1
        ORDER BY amaz_id
    ) tf
    WHERE cc.contract_id = 1234;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多