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后面附加一个数字
此视图用于为另一个系统生成XML。我不想仅在此视图中更改数据库中此字段的值。
我希望这更加清楚。谢谢。
答案 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>)