SQL视图-如何根据另一列的计数设置一列的值(附加数字)?

时间:2019-02-06 15:09:36

标签: sql-server

USE [UAT]
GO

/****** Object:  View [dbo].[vwVOUCHER_EXPORT]    Script Date: 2/6/2019 1:35:42 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


ALTER VIEW [dbo].[vwVOUCHER_EXPORT] AS
SELECT [VOUCHER].[ID] 
      ,[VOUCHER].[EMP_ID] 
      ,[VOUCHER].[DATE_TO_PAY]
      ,[VOUCHER_PAYMENT].[PAYEE_NAME]
      ,[VOUCHER_PAYMENT].[BANK_ACCOUNT_ID] 
      ,[VOUCHER_PAYMENT].[VENDOR_ADDRESS_ID]    
      ,[VOUCHER].[PAYMENT_METHOD]   

FROM VOUCHER            
    INNER JOIN VOUCHER_STATUS ON VOUCHER.VOUCHER_STATUS_ID = VOUCHER_STATUS.ID
    LEFT OUTER JOIN VOUCHER_PAYMENT ON VOUCHER.ID = VOUCHER_PAYMENT.VOUCHER_ID
    LEFT OUTER JOIN BANK_ACCOUNT ON VOUCHER.EMP_ID = BANK_ACCOUNT.EMP_ID
    LEFT OUTER JOIN VENDOR ON VOUCHER.PAYEE_VENDOR_ID = VENDOR.ID



GO

我正在使用MS SQL Server13。使用此视图,我将返回付款详细信息。每个EMP_ID可以具有多个bank_account_ids和vendor_address_ids。付款方式类型为EQPMWT,EQPMMC和EQPMAH。在所附的屏幕截图中,您可以看到它们可能有两个银行帐户ID,或两个vendor_address_id。我需要根据bank_account_id和vendor_address_id asc的数值在PAYMENT_METHOD字段值EQPMWT,EQPMMC和EQPMAH后面附加一个数字

附加的屏幕是此查询返回的内容以及我需要的内容。 what I have

what I need

此视图用于为另一个系统生成XML。我不想仅在此视图中更改数据库中此字段的值。

我希望这更加清楚。谢谢。

2 个答案:

答案 0 :(得分:0)

类似的事情应该起作用:

Update T1 Set PaymentMethod = 'EPMWT' + Convert(Varchar(100), T2.Cnt
   From Table1 T1
   Join (Select Emp_Id, Count(*) Cnt From Table2 Group By Emp_Id) T2 On T2.Emp_Id = T1.Emp_Id

我想指出,我不会以这种方式设计结构。我将使用与上面类似的语法在查询时(也许在视图中)导出值。

答案 1 :(得分:0)

除了使用CASE WHEN之外,您还可以将计数连接到结果

select CONCAT('EPMWT', COUNT([BANK_ACCOUNT].[EMP_ID]))

如果您不想使用Group by,则可以使用窗口功能

select CONCAT('EPMWT', COUNT([BANK_ACCOUNT].[EMP_ID]) over ())

inside over子句,您需要传递分组运算符

count([BANK_ACCOUNT].[EMP_ID]) OVER (PARTITION BY <grouping_column>)