分组依据的存在案例查询子查询

时间:2020-01-28 17:41:57

标签: sql sql-server-2014

我有以下查询,我需要添加一个附加列以指示一组行是否在一个列中包含特定值('PROB)(在一个或多个行中);如果分组中确实包含该值,则输出“ Y”,否则输出“ N”。我添加了一个function语句,您将在下面的注释中看到它。

我收到错误safe cast

我不确定如何解决此问题,因为我需要根据null测试此列中是否存在该值。

override fun attachLayoutAnimationParameters(
        child: View?,
        params: ViewGroup.LayoutParams,
        index: Int,
        count: Int
) {
    if (adapter != null && layoutManager is GridLayoutManager) {
        var animationParams =
                params.layoutAnimationParameters as? GridLayoutAnimationController.AnimationParameters 
        if (animationParams == null) {
            animationParams = AnimationParameters()
            params.layoutAnimationParameters = animationParams
        }
        val columns = layoutManager.spanCount
        animationParams.count = count
        animationParams.index = index
        animationParams.columnsCount = columns
        animationParams.rowsCount = count / columns
        val invertedIndex = count - 1 - index
        animationParams.column = columns - 1 - invertedIndex % columns
        animationParams.row = animationParams.rowsCount - 1 - invertedIndex / columns
    } else {
        super.attachLayoutAnimationParameters(child, params, index, count)
    }
}

编辑:以下是(所需)输出(带有较少列)的简化示例: 如果相同的HRS_PERSON_ID至少有1行带有'PROB',则为该人'Y'做 all 行。如果HRS_PERSON_ID没有任何带有'PROB'的行,则将所有行设为'N'<​​/ p>

enter image description here

2 个答案:

答案 0 :(得分:0)

事实证明,这比我想像的要容易,并且不需要Group By

CASE WHEN        (SELECT top 1 OFFER_COMPONENT 
                  FROM PS_HRS_OFF_DTL_I
                  WHERE HRS_RCMNT_ID = B.HRS_RCMNT_ID                                    
                  AND HRS_OFF_ID = B.HRS_OFF_ID
                  AND OFFER_COMPONENT = 'PROB' )
                  IS NOT NULL
                  THEN 'Y'
                  ELSE 'N' END AS [PROB_CODE]

答案 1 :(得分:-1)

我的评论的解释:

如果此查询:

select i,j
from test

返回此

i           j
----------- -----------
1           10
2           10
3           10
4           9

然后,由于某种原因,您可以在MySQL中进行此查询

SELECT j
FROM test
GROUP BY i

但是该查询在MSSQL中失败了(因为它应该这样做!),因为MSSQL无法确定应该为j返回哪个值。应该是较低,较高还是某个随机值(例如MySQL所做的事情)。

解决方案是编写如下内容:

SELECT MIN(j)
FROM test
GROUP BY i

获取每个组中j的最小值。

或者,如果您确实是clueless,则可以写:

SELECT 1
FROM test
GROUP BY i

这将为找到的每个组返回值1