gpt4 book ai didi

sql - 动态交叉应用值

转载 作者:行者123 更新时间:2023-12-04 00:39:35 25 4
gpt4 key购买 nike

我有一些看起来像这样的代码:

SELECT  colname, SUM(value) AS items_sum, COUNT(value) AS items_count
FROM MyTable
CROSS APPLY (
VALUES ('Item1',Item1),('Item2',Item2)
) x(colname, value)
WHERE Date BETWEEN @sdate AND @edate
AND value IS NOT NULL
GROUP BY colname

我被要求将查询更改为不再对 Item1、Item2 进行硬编码,而是接受传入的任何 Item#。我尝试了一些解决方案来通过 select 语句获取 Item#,但似乎聚合函数SUM() & COUNT() 提示,因为我尝试过的解决方案返回列名的 varchar,而不是列数据本身。有没有办法在不使用字符串连接的情况下传递列 Item#?

谢谢!

最佳答案

我已经在这个网站上发帖几个月了。我不会经常学习一些我以前没有见过的语法。

真正酷的东西!

我通常将代码放在测试环境中。在这种情况下,我使用了 Adventure Works 2012。

enter image description here

工具提示或图片讲述了一千个单词。

您在值列表中有元组。但是,TotalDue 不是字符串,它是指外部表 [Sales].[SalesOrderHeader]。

替换内十字应用选择 只会带回应用于每一行的值。对外部表的引用丢失。

鉴于这一事实,您将需要动态创建 SQL。您可以使用列名称作为 sysname 创建和填充表。然后动态编写代码并用 sp_executesql 执行。

确保这是一个内部的、报告的、查询。 您不想引入 SQL 注入(inject)。

此外,虽然开始并有效,但它确实不是最快或最好的方法。 日期文字是提高速度和准确性的方法。

  • Bad habits to kick : mis-handling date / range queries
  • 关于sql - 动态交叉应用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20577323/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com