Sql server IIF(计数)表达式并通过不返回预期结果进行分组
我将SSMS用于select语句,在该语句中,有许多表被联接。根据我使用的IIF(计数(*)的结果,其中一个字段需要标记为“M”或“N” select语句如下所示:Sql server IIF(计数)表达式并通过不返回预期结果进行分组,sql-server,Sql Server,我将SSMS用于select语句,在该语句中,有许多表被联接。根据我使用的IIF(计数(*)的结果,其中一个字段需要标记为“M”或“N” select语句如下所示: SELECT , AcctChar.Chr1Nme AS [Submitted For Party] , P.LOCAL_CURR_CDE AS [Notional Currency 1] , T.PortfolioCode AS [Acct
SELECT
, AcctChar.Chr1Nme AS [Submitted For Party]
, P.LOCAL_CURR_CDE AS [Notional Currency 1]
, T.PortfolioCode AS [Acct_ID]
, T.IAMID AS [IAMID]
, iif(count(*) > 1, 'M', 'N') AS [ActionType]
, T.Quantity AS [Quantity]
, p.FLD1_AMT AS [Notional]
, I.ISS_TMS AS [EffectiveDte]
from [dbo].[POSITION] AS p
INNER JOIN [dbo].[Trades] AS T
ON T.PortfolioCode = P.ACCT_ID
INNER JOIN InfoPortal.dbo.ISSUE_DG AS i
ON i.instr_id = p.instr_id
LEFT OUTER JOIN infoportal.dbo.DW_AcctCharDG AS AcctChar
ON AcctChar.AcctId = p.acct_ID
GROUP BY
AcctChar.Chr1Nme
, P.LOCAL_CURR_CDE
, T.PortfolioCode
, T.IAMID
, T.Quantity
, p.FLD1_AMT
, I.ISS_TMS
上面的查询返回正确数量的结果,但[ActionType]不正确。它将所有记录显示为“N”,这是不正确的。我需要iif(count(*)>1,“M”,“N”)语句来标识T中是否有任何记录(使用T.PortfolioCode和T.IAMID的唯一组合)来标识T中是否只有一条记录(在这种情况下,ActionType='N'或者如果T中有>1条记录具有相同的PortfolioCode和IAMID组合,则将它们标记为'M'
如果我仅按T.PortfolioCode和T.IAMID分组,则会出现以下错误:
列“AcctChar.Chr1Nme”在select列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。如果我通过将AcctChar.Chr1Nme添加到GROUP BY中,它只会继续执行select语句中的下一个字段,并出现相同的错误
如何为[ActionType]配置iif(COUNT)子句或者GROUP BY只查看T.PortfolioCode和T.IAMID组合,而不是select语句中的所有字段,以仅确定T.PortfolioCode和T.IAMID组合的唯一性?我自己无法运行它,这有点猜测,但我认为您需要在子查询中计算:
SELECT
, AcctChar.Chr1Nme AS [Submitted For Party]
, P.LOCAL_CURR_CDE AS [Notional Currency 1]
, T.PortfolioCode AS [Acct_ID]
, T.IAMID AS [IAMID]
, T.ActionType AS [ActionType]
, p.FLD1_AMT AS [Notional]
, I.ISS_TMS AS [EffectiveDte]
from [dbo].[POSITION] AS p
INNER JOIN (select PortfolioCode
, IAMID
, iif(count(*) > 1, 'M', 'N') AS [ActionType]
from Trades group by PortfolioCode, IAMID
) AS T
INNER JOIN InfoPortal.dbo.ISSUE_DG AS i
ON i.instr_id = p.instr_id
LEFT OUTER JOIN infoportal.dbo.DW_AcctCharDG AS AcctChar
ON AcctChar.AcctId = p.acct_ID
你已经标记了这个
mysql
,但它似乎与mssql
有关。谢谢你,克里斯,这非常有效。很高兴听到。请随意接受答案:)