[SQL] 어떻게 SQL 쿼리를 사용하여 쉼표로 구분 된 목록을 만들려면 어떻게해야합니까?
SQL어떻게 SQL 쿼리를 사용하여 쉼표로 구분 된 목록을 만들려면 어떻게해야합니까?
나는 3 표라고했다 :
나는 GUI의 모든 자원 이름의 테이블을 보여주고 싶어요. 각 행에 하나 개의 셀에서 나는 모든 응용 프로그램을 나열하고자하는 해당 자원의 (쉼표로 구분).
질문은 그래서, 내가 모든 리소스를 얻을 필요가 나는 각 자원에 대한 모든 응용 프로그램을 얻을 필요로 SQL에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
그 자원에 대한 응용 프로그램의 목록을 얻을 수있는 자원 당 별도의 쿼리를 각 리소스를 통해 처음으로 다음 루프를 자원에서 선택 *를 실행해야합니까?
내가 한 쿼리에서이 작업을 수행 할 수있는 방법이 있나요?
해결법
-
==============================
1.DB를 불가지론 방법으로 그것을 할 수있는 방법은 없습니다. 당신이 전체 얻을 필요가 그래서 다음과 같은 데이터를-설정 :
DB를 불가지론 방법으로 그것을 할 수있는 방법은 없습니다. 당신이 전체 얻을 필요가 그래서 다음과 같은 데이터를-설정 :
select r.name as ResName, a.name as AppName from Resouces as r, Applications as a, ApplicationsResources as ar where ar.app_id = a.id and ar.resource_id = r.id
그리고 다음 프로그램 응용 CONCAT 경우 resName에 의해 그룹화 프로그래밍있다.
-
==============================
2.
SELECT r.name, GROUP_CONCAT(a.name SEPARATOR ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name
SELECT r.name, STUFF((SELECT ','+ a.name FROM APPLICATIONS a JOIN APPLICATIONRESOURCES ar ON ar.app_id = a.id WHERE ar.resource_id = r.id GROUP BY a.name FOR XML PATH(''), TYPE).value('.','VARCHAR(max)'), 1, 1, '') FROM RESOURCES r
SELECT r.name, STRING_AGG(a.name, ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name
나는 오라클에서 문자열을 통합 / 연결에 대해 읽어 보시기 바랍니다.
-
==============================
3.COALESCE를 사용하여 SQL Server의 쉼표로 구분 된 문자열을 구축 http://www.sqlteam.com/article/using-coalesce-to-build-comma-delimited-string
COALESCE를 사용하여 SQL Server의 쉼표로 구분 된 문자열을 구축 http://www.sqlteam.com/article/using-coalesce-to-build-comma-delimited-string
예:
DECLARE @EmployeeList varchar(100) SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + CAST(Emp_UniqueID AS varchar(5)) FROM SalesCallsEmployees WHERE SalCal_UniqueID = 1 SELECT @EmployeeList
-
==============================
4.당신이 가장 가능성이 문자열 조작의 형태를 필요로하기 때문에, 데이터베이스 불가지론 방법으로이 작업을 수행하는 모든 솔루션이 있는지 모르겠어요, 그 공급 업체 사이에 일반적으로 다르다.
당신이 가장 가능성이 문자열 조작의 형태를 필요로하기 때문에, 데이터베이스 불가지론 방법으로이 작업을 수행하는 모든 솔루션이 있는지 모르겠어요, 그 공급 업체 사이에 일반적으로 다르다.
SQL Server 2005 및 최대를 들어, 당신은 사용할 수 있습니다 :
SELECT r.ID, r.Name, Resources = STUFF( (SELECT ','+a.Name FROM dbo.Applications a INNER JOIN dbo.ApplicationsResources ar ON ar.app_id = a.id WHERE ar.resource_id = r.id FOR XML PATH('')), 1, 1, '') FROM dbo.Resources r
그것은 쉼표로 구분 된 목록으로 하위 항목 (주어진 자원에 대한 응용 프로그램)를 나열하는 XML 경로 구조에 대한 SQL 서버 2005을 사용합니다.
즙을 짜고 난 찌꺼기
-
==============================
5.난 당신이 원하는 생각 :
난 당신이 원하는 생각 :
TABLE_NAME GROUP BY 항목 이름 FROM SELECT 항목 이름, GROUP_CONCAT (DepartmentId)
당신은 MySQL을 사용하는 경우
참고
-
==============================
6.SQL Server를 가정 :
SQL Server를 가정 :
테이블 구조 :
CREATE TABLE [dbo].[item_dept]( [ItemName] char(20) NULL, [DepartmentID] int NULL )
질문:
SELECT ItemName, STUFF((SELECT ',' + rtrim(convert(char(10),DepartmentID)) FROM item_dept b WHERE a.ItemName = b.ItemName FOR XML PATH('')),1,1,'') DepartmentID FROM item_dept a GROUP BY ItemName
결과 :
ItemName DepartmentID item1 21,13,9,36 item2 4,9,44
-
==============================
7.나는 (코드는 필요에 따라 수정하십시오, 단지 예입니다 아래) 우리가 검색하기 위해 다음과 같은 방법으로 쓸 수 있다고 생각 :
나는 (코드는 필요에 따라 수정하십시오, 단지 예입니다 아래) 우리가 검색하기 위해 다음과 같은 방법으로 쓸 수 있다고 생각 :
Create FUNCTION dbo.ufnGetEmployeeMultiple(@DepartmentID int) RETURNS VARCHAR(1000) AS BEGIN DECLARE @Employeelist varchar(1000) SELECT @Employeelist = COALESCE(@Employeelist + ', ', '') + E.LoginID FROM humanresources.Employee E Left JOIN humanresources.EmployeeDepartmentHistory H ON E.BusinessEntityID = H.BusinessEntityID INNER JOIN HumanResources.Department D ON H.DepartmentID = D.DepartmentID Where H.DepartmentID = @DepartmentID Return @Employeelist END SELECT D.name as Department, dbo.ufnGetEmployeeMultiple (D.DepartmentID)as Employees FROM HumanResources.Department D SELECT Distinct (D.name) as Department, dbo.ufnGetEmployeeMultiple (D.DepartmentID) as Employees FROM HumanResources.Department D
-
==============================
8.SQL 서버의 다음 버전에서 당신은 할 수있을 것입니다
SQL 서버의 다음 버전에서 당신은 할 수있을 것입니다
SELECT r.name, STRING_AGG(a.name, ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name
제품의 이전 버전의이 문제에 대한 다른 접근 방식의 매우 다양한 종류가 있습니다. 그 중 훌륭한 평가는 기사에 접합하는 행 거래-SQL에서 값.
-
==============================
9.MySQL의
MySQL의
SELECT r.name, GROUP_CONCAT(a.name SEPARATOR ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name
**
MS SQL 서버
SELECT r.name, STUFF((SELECT ','+ a.name FROM APPLICATIONS a JOIN APPLICATIONRESOURCES ar ON ar.app_id = a.id WHERE ar.resource_id = r.id GROUP BY a.name FOR XML PATH(''), TYPE).value('.','VARCHAR(max)'), 1, 1, '') FROM RESOURCES r GROUP BY deptno;
신탁
SELECT r.name, LISTAGG(a.name SEPARATOR ',') WITHIN GROUP (ORDER BY a.name) FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name;
-
==============================
10.불가지론, 드롭 뒤로 펀트합니다.
불가지론, 드롭 뒤로 펀트합니다.
Select a.name as a_name, r.name as r_name from ApplicationsResource ar, Applications a, Resources r where a.id = ar.app_id and r.id = ar.resource_id order by r.name, a.name;
이제 CONCATENATE a_names로 서버 프로그래밍 언어 사용자는 r_name는 지난 번과 동일하면서.
-
==============================
11.이것은 SQL 서버에서 그것을 할 것입니다 :
이것은 SQL 서버에서 그것을 할 것입니다 :
DECLARE @listStr VARCHAR(MAX) SELECT @listStr = COALESCE(@listStr+',' ,'') + Convert(nvarchar(8),DepartmentId) FROM Table SELECT @listStr
from https://stackoverflow.com/questions/1817985/how-do-i-create-a-comma-separated-list-using-a-sql-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 MySQL의에서 다음 / 이전 기록을 얻으려면? (0) | 2020.03.16 |
---|---|
[SQL] SQL에서 어떻게 범위에서 당신 "에 의해 그룹"할 수 있습니까? (0) | 2020.03.16 |
[SQL] 두 개의 서로 다른 데이터베이스에 테이블을 사이에 가입? (0) | 2020.03.16 |
[SQL] MySQL은 시뮬레이션 지연 기능 (0) | 2020.03.16 |
[SQL] MySQL의 문자열과 함께 작업에) (폭발의 등가 (0) | 2020.03.16 |