복붙노트

[SQL] 어떻게 SQL 쿼리를 사용하여 쉼표로 구분 된 목록을 만들려면 어떻게해야합니까?

SQL

어떻게 SQL 쿼리를 사용하여 쉼표로 구분 된 목록을 만들려면 어떻게해야합니까?

나는 3 표라고했다 :

나는 GUI의 모든 자원 이름의 테이블을 보여주고 싶어요. 각 행에 하나 개의 셀에서 나는 모든 응용 프로그램을 나열하고자하는 해당 자원의 (쉼표로 구분).

질문은 그래서, 내가 모든 리소스를 얻을 필요가 나는 각 자원에 대한 모든 응용 프로그램을 얻을 필요로 SQL에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

그 자원에 대한 응용 프로그램의 목록을 얻을 수있는 자원 당 별도의 쿼리를 각 리소스를 통해 처음으로 다음 루프를 자원에서 선택 *를 실행해야합니까?

내가 한 쿼리에서이 작업을 수행 할 수있는 방법이 있나요?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.난 당신이 원하는 생각 :

    난 당신이 원하는 생각 :

    TABLE_NAME GROUP BY 항목 이름 FROM SELECT 항목 이름, GROUP_CONCAT (DepartmentId)

    당신은 MySQL을 사용하는 경우

    참고

  6. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    11.이것은 SQL 서버에서 그것을 할 것입니다 :

    이것은 SQL 서버에서 그것을 할 것입니다 :

    DECLARE @listStr VARCHAR(MAX)
    SELECT @listStr = COALESCE(@listStr+',' ,'') + Convert(nvarchar(8),DepartmentId)
    FROM Table
    SELECT @listStr
    
  12. 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