【发布时间】:2015-02-01 09:06:05
【问题描述】:
我在 SQL Server Management Studio 工作。我有一张表,里面有模拟数据。其中四列是“Version”、“Scenario_Name”、“Measure”和“Value”。 “版本”列将包含软件版本号。 “Scenario_Name”列将包含场景的文件名。 “度量”列本质上将具有场景的数据类型条目,例如时间、金钱、成本等。“值”列将记录与度量列关联的数字。例如,特定场景的“度量”可能是“人数”,“值”是 100。好吧,希望我的设置有意义。
我需要编写一个查询,该查询将获取特定“Measures”的“Value”列中的整数总和,并将该总和值作为“Measure”=“SUM”的新行条目。现在我可以完成其中的一部分,但棘手的部分是我需要将特定“度量”条目的这两个“值”整数相加,但对于每个 DISTINCT“场景名称”和可能在表中的每个“版本” .
我需要的结果看起来像这样。如果我对每个场景的工作日人数和周末人数有一个“度量”条目,那么我想生成一个新列,记录每个场景和每个不同版本的总人数(周末 + 工作日) .
编辑:我不想生成新列,我想添加新的行条目。
我已经做到了这个大声笑(我还在学习很多这些东西)
SELECT Scenario_Name, Version, SUM(Value) AS Total_People FROM TableName
WHERE Measure = 'Weekends' OR Measure = 'Weekdays'
GROUP BY Scenario_Name, Version
这基本上是我努力的结果。我可以通过使用 where Scenario_Name="" 和 Version="" 来得到总和,但我不知道如何为所有不同的条目做到这一点,老实说,我不知道如何在基本的东西之外做到这一点。
此外,我必须弄清楚如何将这个想法放入一个非常大的(已经编写但不是由我查询)中,它从多个数据库中获取填充此表的所有内容。
编辑:
| Scenario_Name | Measure | Value |
|---------------|-------------|-------|
| Scenario1 | Weekends | 10 |
| Scenario1 | Weekdays | 25 |
| Scenario1 | TotalPeople | 35 |
| Scenario2 | Weekends | 12 |
| Scenario2 | Weekdays | 30 |
| Scenario2 | TotalPeople | 42 |
| Scenario3 | Weekends | 5 |
| Scenario3 | Weekdays | 15 |
| Scenario3 | TotalPeople | 20 |
“测量”有更多条目,并且每个版本都会重复场景文件。但是,关键是我希望 Measure "TotalPeople" 下的条目是查询的结果,该查询从 Value 列中提取浮点数并对 Weekends 和 Weekdays 求和并将该值放入 TotalPeople
编辑:我继续想出一些东西。这是我在第一次编辑之前的最后陈述中提到的那个查询的一个例子。
SELECT (SELECT attributedata FROM [' +@dbname+ '].table1 WHERE AttributeName = ''Scenario Name'') AS Scenario_Name,
(SELECT attributedata FROM [' +@dbname+ '].table1 where AttributeName = ''Version'') AS Version,
CAST(COUNT(*) AS float)/MAX(repnum) AS value,
finalDisposition AS Measure,
GETDATE() AS DateRun,
(SELECT ' + CAST(@testid as CHAR) +') AS TestNum
FROM [' +@dbname+ '].table2
GROUP BY FinalDisposition
我想我只需要使用 UNION 来添加另一个,但将计算内容更改为 Value 并将 TotalPeople 设为 Measure
所以使用这个,有人对他们将如何做到这一点有任何想法吗?我知道除了调用 Measure 和 Value 的查询之外的所有内容都需要保持不变。
还值得注意的是,“测量”列的条目是从不同数据库中的条目中提取的。与每个 Scenario_Name 关联并使用 @dbname 变量提取的数据库。那么我将如何使用该格式添加一个名为 TotalPeople 的新“度量”条目?
SELECT CAST(COUNT(id) AS float) AS Value, FinalDisposition AS Measure FROM [' +@dbname '].table2
WHERE FinalDisposition = 'Weekdays' OR FinalDisposition = 'Weekends'
GROUP BY FinalDisposition
正在计算的“id”是场景中来自其他数据库的人员的 id,就像 FinalDisposition 是来自数据库中其他表的列名一样。这将提取我需要的值,但现在我如何对它们求和并使总和等于一个新的 Measure 条目?
最终编辑(希望如此): 这就是我现在正在使用的。那么相关的块。
select (cast(count(id) as float)) as Value, 'TotalPeople' as Measure
from table1
where FinalDisposition = 'Weekends' or FinalDisposition = 'Weekdays'
group by FinalDisposition
除了总和之外,一切都有效。我现在需要的只是能够将 Value 条目相加。
【问题讨论】:
-
“生成一个新列”?您想在查询输出中包含派生列,或者修改表以便实际在其中创建新的永久列?
-
我希望总和的结果成为连续的新条目。我正在使用的表主要由“度量”列组织,然后每个度量都有一个特定的“值”条目。其他列实际上只是为了区分运行的不同场景以及使用的版本。我希望“总计”或“总和”成为“度量”中的新条目,实际总和是“值”列中的数字
-
为什么您的示例中的查询不起作用 - 它是否返回错误?我想我错过了你正在寻找的东西。
-
如果不清楚,我很抱歉。上面的查询有效。我把它放在那里作为我迄今为止提出的一个例子。上面的查询只是计算一个新列 Total_People,但我希望获取“工作日”和“周末”的总和,并将这些结果排序到现有列中。例如,每个场景的新条目将在显示 Total_People 的“度量”列中找到,“值”列中的条目将是 SUM。这有意义吗?
-
也许您正在谈论旋转数据。您能否说明问题中的结果集应该是什么样子?
标签: sql-server database sql-server-2008 union aggregate-functions