Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用stuff函数获取员工的项目详细信息?_Sql_Sql Server - Fatal编程技术网

Sql 如何使用stuff函数获取员工的项目详细信息?

Sql 如何使用stuff函数获取员工的项目详细信息?,sql,sql-server,Sql,Sql Server,我的问题是: SELECT employeedetail.firstname ,( SELECT STUFF(( SELECT ',' + projectname FROM productdetail GROUP BY projectname HAVING count(projectname) > 1

我的问题是:

SELECT employeedetail.firstname
    ,(
        SELECT STUFF((
                    SELECT ',' + projectname
                    FROM productdetail
                    GROUP BY projectname
                    HAVING count(projectname) > 1
                    FOR XML PATH('')
                    ), 1, 1, '') AS abc
        FROM productdetail
        INNER JOIN employeedetail ON productdetail.employeeid = employeedetail.employeeid
        GROUP BY productdetail.projectname
        HAVING count(productdetail.projectname) > 1
        ) AS projects
    ,count(productdetail.projectname) AS number_of_projects
FROM employeedetail
INNER JOIN productdetail ON employeedetail.employeeid = productdetail.employeeid
GROUP BY employeedetail.firstname
HAVING count(productdetail.projectname) > 1
我要做的是,我想从employeedetail表中选择正在处理多个项目的员工的名字,并基于他们的projectdetail.employeeid,它用作projectdetail表的外键,并根据employeename连接他们的项目名

例如:

Adam      project1,project2,project3

jorge     project1, project2
我的查询没有给出我想要的确切结果。这是我的项目明细表

这样试试

;WITH CTE AS (
SELECT employeedetail.employeeid
FROM employeedetail
INNER JOIN productdetail ON employeedetail.employeeid = productdetail.employeeid
GROUP BY employeedetail.employeeid
HAVING count(productdetail.projectname) > 1
)

SELECT C.employeeid, STUFF((SELECT ',' +P.projectname 
   FROM productdetail P 
   WHERE P.employeeid = C.employeeid FOR XML PATH('') ),1,1,'')
FROM CTE C
在本文中,我将员工ID引入了CTE,他们有多个项目,并完成了for XML

编辑:

在您的代码中,对count>1进行了不必要的检查,还有一件事是,用于填充的外部选择和内部选择之间没有连接。由于这些选择之间没有连接,因此逗号分隔的项目列表将附加到每个员工

我也做了同样的事情,但在WHERE子句中,我将外部Select EmpID与东西Select EmpID连接起来

为了简化,我使用了CTE。您可以按如下方式执行此操作

 SELECT employeedetail.employeeid
       ,employeedetail.firstname
       ,count(productdetail.projectname) Project_Count
       , STUFF((
            SELECT ',' + P.projectname
            FROM productdetail P
            WHERE P.employeeid = employeedetail.employeeid
            FOR XML PATH('')
            ), 1, 1, '')

FROM employeedetail
INNER JOIN productdetail ON employeedetail.employeeid = productdetail.employeeid
GROUP BY employeedetail.employeeid,employeedetail.firstname
HAVING count(productdetail.projectname) > 1
这样试试

;WITH CTE AS (
SELECT employeedetail.employeeid
FROM employeedetail
INNER JOIN productdetail ON employeedetail.employeeid = productdetail.employeeid
GROUP BY employeedetail.employeeid
HAVING count(productdetail.projectname) > 1
)

SELECT C.employeeid, STUFF((SELECT ',' +P.projectname 
   FROM productdetail P 
   WHERE P.employeeid = C.employeeid FOR XML PATH('') ),1,1,'')
FROM CTE C
在本文中,我将员工ID引入了CTE,他们有多个项目,并完成了for XML

编辑:

在您的代码中,对count>1进行了不必要的检查,还有一件事是,用于填充的外部选择和内部选择之间没有连接。由于这些选择之间没有连接,因此逗号分隔的项目列表将附加到每个员工

我也做了同样的事情,但在WHERE子句中,我将外部Select EmpID与东西Select EmpID连接起来

为了简化,我使用了CTE。您可以按如下方式执行此操作

 SELECT employeedetail.employeeid
       ,employeedetail.firstname
       ,count(productdetail.projectname) Project_Count
       , STUFF((
            SELECT ',' + P.projectname
            FROM productdetail P
            WHERE P.employeeid = employeedetail.employeeid
            FOR XML PATH('')
            ), 1, 1, '')

FROM employeedetail
INNER JOIN productdetail ON employeedetail.employeeid = productdetail.employeeid
GROUP BY employeedetail.employeeid,employeedetail.firstname
HAVING count(productdetail.projectname) > 1
你能试试这个吗

SELECT employeedetail.firstname
    ,(
        SELECT STUFF((
                    SELECT ',' + pd.projectname
                    FROM productdetail as pd
                    WHERE pd.employeeid = employeedetail.employeeid
                    FOR XML PATH('')
                    ), 1, 1, '')
       ) AS projects
    ,count(DISTINCT productdetail.projectname) AS number_of_projects
FROM employeedetail
INNER JOIN productdetail ON employeedetail.employeeid = productdetail.employeeid
GROUP BY employeedetail.firstname,number_of_projects
HAVING count(DISTINCT productdetail.projectname) > 1
你能试试这个吗

SELECT employeedetail.firstname
    ,(
        SELECT STUFF((
                    SELECT ',' + pd.projectname
                    FROM productdetail as pd
                    WHERE pd.employeeid = employeedetail.employeeid
                    FOR XML PATH('')
                    ), 1, 1, '')
       ) AS projects
    ,count(DISTINCT productdetail.projectname) AS number_of_projects
FROM employeedetail
INNER JOIN productdetail ON employeedetail.employeeid = productdetail.employeeid
GROUP BY employeedetail.firstname,number_of_projects
HAVING count(DISTINCT productdetail.projectname) > 1

它正在工作,但我的代码有什么问题?我不想用CTEgIven解释你在代码中的错误。检查更新的答案@JasonClarkit正在工作,但如果我也想检索firstname呢?其次,我正在运行以下代码:选择STUFF SELECT',projectname FROM productdetail,其中productdetail.employeeid=employeedetail.employeeid作为XML路径1,1,作为productdetail内部的abc在productdetail.employeeid=employeedetail.employeeid组中加入employeedetail.firstname,employeedetail.employeeid具有countproductdetail.projectname>1,它在子查询中分别为我提供项目详细信息,而对于firstname,我使用的是主查询,但在组合这两个查询时提供错误如果要显示firstname、计数值,可以。。但是把名字放在小组里。它可以工作,但是我的代码有什么问题吗?我不想用CTEgIven解释你在代码中的错误。检查更新的答案@JasonClarkit正在工作,但如果我也想检索firstname呢?其次,我正在运行以下代码:选择STUFF SELECT',projectname FROM productdetail,其中productdetail.employeeid=employeedetail.employeeid作为XML路径1,1,作为productdetail内部的abc在productdetail.employeeid=employeedetail.employeeid组中加入employeedetail.firstname,employeedetail.employeeid具有countproductdetail.projectname>1,它在子查询中分别为我提供项目详细信息,而对于firstname,我使用的是主查询,但在组合这两个查询时提供错误如果要显示firstname、计数值,可以。。但把名字放在小组里。