我需要创建一个显示各种总数的视图。
我有两张桌子。一个具有UserID和作业应用程序的状态代码。另一个包含UserID和包含布尔0/1的4列。这些列中的每一列都表示工作技能(如跑步,跳跃,投掷,攀爬)。视图只需要显示每个工作技能的总计,一次是针对正在进行的应用程序,一次是针对已完成的那些。我无法搞清楚小组并为每项技能选择列。
User表有ID(int)和ApplicationStatus(varchar4)
applicationStatus是:
JobSkills表有: ID,usertable的匹配UserID和4个JobSkill列:JobSkill_1,JobSkill_2,JobSkill_3和JobSkill_4,每个都定义为整数,如果用户具有该技能,则包含1。 该视图应显示以下摘要:
类似的东西:
SELECT
[UserID],
SUM(JobSKill_1) as Run,
SUM(JobSkill_2) AS Jump,
SUM(JobSkill_3) AS Throw,
SUM(JobSkill_4) AS Climb
FROM [dbo].[tblJobSkills]
GROUP BY [UserID] WITH ROLLUP
答案 0 :(得分:1)
您似乎需要条件聚合才能获得所需的结果。
在SQL Server中,聚合函数可以将表达式作为参数(例如SUM)。
因此可以在聚合函数中使用CASE WHEN表达式
SELECT SUM( CASE ApplicationStatus WHEN '0000' THEN 1 ELSE 0 END ) AS NotStartedCnt,
SUM( CASE ApplicationStatus WHEN '0500' THEN 1 ELSE 0 END ) AS InProgressCnt,
SUM( CASE ApplicationStatus WHEN '1000' THEN 1 ELSE 0 END ) AS CompletedCnt,
SUM( CASE ApplicationStatus WHEN '1000' THEN JobSkill_1 ELSE 0 END ) AS JobSkill_1Count,
SUM( CASE ApplicationStatus WHEN '1000' THEN JobSkill_2 ELSE 0 END ) AS JobSkill_2Count,
SUM( CASE ApplicationStatus WHEN '1000' THEN JobSkill_3 ELSE 0 END ) AS JobSkill_3Count,
SUM( CASE ApplicationStatus WHEN '1000' THEN JobSkill_4 ELSE 0 END ) AS JobSkill_4Count
FROM User AS U
INNER JOIN JobSkills AS JS ON U.ID = JS.UserID
其中a,b,c,d可以是列,常数,函数或表达式(见CASE)
以上将导致对每一行评估CASE表达式,并将结果作为输入传递给SUM函数。
注意:以上与CASE WHEN SUM()= a THEN b ELSE c END不同,因为在这种情况下,SUM函数首先处理所有输入行,并且仅比较SUM函数的结果。
使用上述方法,可以在不同于GROUP BY中指定的条件集合上进行聚合。
您的问题的解决方案(假设User和JobSkills之间的一对一关系)如下:
<div id="container" >
{% unless settings.portfolio_collection == blank or collections[settings.portfolio_collection].empty? %}
{% assign collection = collections[settings.portfolio_collection] %}
<ul class="grid clearfix">
{% for product in collection.products %}
<li class="masonryImage three-per-row centered">
<img style="border:1px solid white;" src="{{ product | img_url: 'grande' }}"/>
</li>
{% endfor %}
{% include 'portfolio-layout.js' %}
</ul>
{%endunless%}
</div>