SQL Server에서 작업 중이므로 쿼리에 대한 도움이 필요합니다. 나는 2 표 Roster
및 Customer
이CONVERT를 사용하여 다른 테이블의 CASE 및 SELECT 사용
:
이
는 시나리오입니다.PK [ID]
두 테이블에 모두 존재합니다.
CREATE TABLE [dbo].[Tbl_Roster_Test](
[CONCATENATE_NUMBER] [varchar](100) NOT NULL,
[CONCATENATE_NAME] [varchar](100) NULL,
[CUST_ID] [varchar](100) NULL,
[CUST_NAME] [varchar](100) NULL,
[ID] [varchar](100) NOT NULL,
[ID_NAME] [varchar](100) NULL,
) ON [PRIMARY]
CREATE TABLE [dbo].[Tbl_Customer_Test](
[ID] [varchar](100) NOT NULL,
[CUST_ID_1] [varchar](100) NULL,
[CUST_ID_2] [varchar](100) NULL,
) ON [PRIMARY]
INSERT INTO [BOSSTest].[dbo].[Tbl_Roster_Test]
([CONCATENATE_NUMBER],[CONCATENATE_NAME],[CUST_ID],[CUST_NAME],[ID],[ID_NAME])
SELECT 'US193085','UNIVERSITY OF ARIZONA','','','US193085','UNIVERSITY OF ARIZONA'
UNION ALL
SELECT 'US193085117933','UNIVERSITY OF ARIZ','117933','UNIVERSITY OF ARIZ','US193085','UNIVERSITY OF ARIZONA'
UNION ALL
SELECT 'US193085T22346','UNIVERSITY OF AZ','T22346','UNIVERSITY OF AZ','US193085','UNIVERSITY OF ARIZONA'
INSERT into [BOSSTest].[dbo].[Tbl_Customer_Test]
([ID],[CUST_ID_1],[CUST_ID_2])
SELECT 'US193085','117933',''
UNION ALL
SELECT 'US193085','T22346',''
UNION ALL
SELECT 'US193085','T22346','117933'
UNION ALL
SELECT 'US193085','',''
논리 ...이 알고
In [Tbl_Roster_Test]
IF [CUST_ID] = '' THEN [CONCATENATE_NAME] = [ID_Name]
ELSE
IF [CUST_ID] <> '' THEN [CONCATENATE_NAME] = [Cust_ID_Name]
은, 지금은 [ID] 위의 논리를 사용하여를 사용하여 두 테이블을 연결하기 위해 노력하고있어. 다음 [ID_NAME]을 선택하지 않으면이 [CUST_ID] 다음, [Cust_ID_Name] 선택이 있다면
는
3 경우가 있습니다
1. There is no data in [Cust_ID]
2. There is data in [CUST_ID_1]
3. There is no data in [CUST_ID_1] and There is data in [CUST_ID_2]
나는이 쿼리를 실행
...SELECT
C.[ID]
,C.[CUST_ID_1]
,C.[CUST_ID_2]
,(SELECT TOP 1 ISNULL([CONCATENATE_NAME],'') FROM BOSSTest.dbo.Tbl_Roster_Test R WHERE C.[ID] = R.[ID]) AS [Customer_Name]
FROM [BOSSTest].[dbo].[Tbl_Customer_Test] C
이것은 내가 얻은 것입니다.
+--------+------ -+---------+---------------------+
| ID|CUST_ID_1|CUST_ID_2| Customer_Name|
+--------+------ -+---------+---------------------+
|US193085| 117933| |UNIVERSITY OF ARIZONA|
|US193085| T22346| |UNIVERSITY OF ARIZONA|
|US193085| T22346| 117933|UNIVERSITY OF ARIZONA|
|US193085| | |UNIVERSITY OF ARIZONA|
+--------+---------+---------+---------------------+
는 그럼 난 ... 하위 쿼리를 사용하는
SELECT
[ID]
,[CUST_ID_1]
,[CUST_ID_2]
,CASE WHEN [CUST_ID_1] <>
THEN (SELECT TOP 1 CONVERT(INT, CASE WHEN IsNumeric(CONVERT(VARCHAR(100),[CONCATENATE_NAME])) = 1 then CONVERT(VARCHAR(100),[CONCATENATE_NAME]) else 0 End) FROM BOSSTest.dbo.Tbl_Roster_Test R WHERE [CUST_ID_1] = R.[CUST_ID])
ELSE 0 END AS [Customer_Name]
FROM (
SELECT
C.[ID]
,C.[CUST_ID_1]
,C.[CUST_ID_2]
,(SELECT TOP 1 ISNULL([CONCATENATE_NAME],'') FROM BOSSTest.dbo.Tbl_Roster_Test R WHERE C.[ID] = R.[ID]) AS [Customer_Name]
FROM [BOSSTest].[dbo].[Tbl_Customer_Test] C
) AS TEST
을 시도 그리고 이것은 내가 무엇을 얻을 수 있습니다.
+--------+------ -+---------+-------------+
| ID|CUST_ID_1|CUST_ID_2|Customer_Name|
+--------+------ -+---------+-------------+
|US193085| 117933| | NULL|
|US193085| T22346| | 0|
|US193085| T22346| 117933| 0|
|US193085| | | 0|
+--------+---------+---------+-------------+
나는 다음과 같은 오류
Syntax error converting the varchar value 'UNIVERSITY OF AZ' to a column of data type int.
을 피하기 위해 CONVERT
을 사용하지만 끝이 정말 필요합니다.
+--------+------ -+---------+---------------------+
| ID|CUST_ID_1|CUST_ID_2| Customer_Name|
+--------+------ -+---------+---------------------+
|US193085| 117933| | UNIVERSITY OF ARIZ|
|US193085| T22346| | UNIVERSITY OF AZ|
|US193085| T22346| 117933| UNIVERSITY OF AZ|
|US193085| | |UNIVERSITY OF ARIZONA|
+--------+---------+---------+---------------------+
내가 3 케이스를 사용하여이 논리를 실행하고 CONVERT
을 잘 활용할 수있는 방법에 대한 제안. 사전에
감사합니다, 루이스
제공되는 데이터는 다음과 같습니다. 케이. [CUST_ID] 열은 문자 또는 숫자로 시작될 수 있습니다. 테이블에서 필자는 필드를 varchar로 정의했습니다. –
Roster_test 117933? Customer_test H17933? 괜찮아? – DimaSUN
솔루션은 H17933과 함께 작동하지만, 제 경우에는 117933이있을 때 여전히 NULL이됩니다. –