类型

时间:2016-01-18 08:34:18

标签: sql sql-server tsql join group-by

我有一个名为HybridCount的表,其中包含这样的数据

enter image description here

但我正在尝试编写一个查询,将上表中的数据分组,如下所示

enter image description here

我已经编写了下面的查询,但它在第6行中排除了

select distinct firstcount.itemcode, firstcount.bincode, firstcount.docentry,  firstcount.countqty  countqty_forFirstCount,  secondcount.countqty countqty_forSecondCount 
from  [dbo].[HybridCount] firstcount cross join hybridcount secondcount 
Where firstcount.itemcode= secondcount.itemcode and secondcount.CountType = 'second count'
and firstcount.CountType = 'First count'

NB itemcode是sku,  有2种计数类型'第一次计数'和“第二次计数”。 用户第一次计算位置时,会将其记录为第一次计数 然后他们可以第二次计算位置,然后记录为第二次计数。现在,在该表中数据的情况下的第二次计数期间,用户计算的项目代码比他在第一次计数中所计数的更多,这就是为什么在第二次屏幕截图中(这表示我想要实现的),项目代码10006的Countqty_firstcount为Null。 用户可能在第一次计数中计算的更多不同的项目代码而不是数字计数,在这种情况下,我需要查询在该项目代码的第一个计数中显示空值

2 个答案:

答案 0 :(得分:2)

不需要"选择不同的"或者"交叉加入"。这里你需要的只是GROUP BY和一些"条件聚合" - 这里我们使用MAX(case ... end)

SELECT 
    itemcode, bincode, docentry, 
    SUM(CASE CountType WHEN 'First count' THEN countqty END) AS countqty_forFirstCount,
    SUM(CASE CountType WHEN 'second count' THEN countqty END) AS countqty_forSecondCount
FROM 
    [dbo].[HybridCount]
GROUP BY
    itemcode, bincode, docentry

答案 1 :(得分:1)

  

假设CountType不会为每个组重复。

使用分组依据和[^a-zA-Z0-9] 。如果SUM()全为NULL,则它将选择NULL。

    private void removeTag()
    {
        string n = "<#Tag(value1)> <#Tag(value2)>  <#Tag(value3)>";
        string tmp = Regex.Replace(n, "Tag+", "");
        tmp = Regex.Replace(tmp, "[^0-9a-zA-Z]+", ",") ;
    }