【问题标题】:count query with joins in sql使用 sql 中的连接计算查询
【发布时间】:2014-01-05 18:38:16
【问题描述】:

我尝试在 SQL 中创建计数查询,并尝试在任何用户在 asp.net 中上传新文档时向主管、经理和主管显示通知

查询

ALTER procedure [dbo].[countdocuments]
   @DepID int
as
    SELECT 
       COUNT(*),
       Designation.DesigID
    FROM DocumentInfo
    INNER JOIN dbo.Userss ON dbo.Userss.DesigID = dbo.Designation.DesigID
    WHERE 
       Userss.DesigID = 'Finance'

但是当我执行它时,出现以下错误

消息 4104,级别 16,状态 1,过程计数文档,第 7 行
无法绑定多部分标识符“dbo.Designation.DesigID”。
消息 4104,级别 16,状态 1,过程计数文档,第 5 行
无法绑定多部分标识符“Designation.DesigID”。

好的,这是我的designation

DesigID   DesigType
  1       SuperVisor
  2       Manager
  3       Director
  4       BasicUsers

这是documentinfo

DocID  DocDescrit  DocName UploadedDate Uploadfile DocTypeID DepID ApproveID UploadedBy UserID
32  asp.net codescomputer 2013-12-30 22:30:00.623    details.docx   1   2   1amna   24

这是userss

UserID UserName Password UserTypeID DepID CreateDate Email PhoeNumber DesigID
21  john    abc 2   NULL    NULL    2013-12-02 22:01:03.903 NULL    abc@hotmail.com 12313   4

当我尝试这个查询时

ALTER procedure [dbo].[countdocuments]
    @DepID int
as
BEGIN
    SET NOCOUNT ON;

    SELECT 
        COUNT(*) AS Cnt, Designation.DesigID
    FROM 
        Designation 
    INNER JOIN 
        dbo.Userss ON dbo.Userss.DesigID = dbo.Designation.DesigID
    WHERE 
        Userss.DesigID = @DepID
    GROUP BY 
        Designation.DesigID
END

当我尝试像 @depid = 4 一样执行时,这显示我这样,我不明白 4 来自哪里..

Cnt  DesigID
 4     4

【问题讨论】:

  • +5 :O 没有人回答我... :/
  • 这是因为它无法在表 Designation 中找到列名 DesigId。指定表在哪里?或者您是否打算将 DocumentInfo 的别名作为 Designation 表
  • 你能提供架构吗?
  • 在文档信息表中没有名为 desigid 的列 ..desigid 仅在 userss 表中,在设计表中有两列,一列是 desigid,另一列是 designtype

标签: sql sql-server count


【解决方案1】:
ALTER procedure [dbo].[countdocuments]
@DepID int
as
BEGIN
  SET NOCOUNT ON;
    SELECT COUNT(*) AS Cnt,Designation.DesigID
    FROM DocumentInfo inner join dbo.Userss 
    on dbo.Userss.DesigID = dbo.DocumentInfo.DesigID
    WHERE Userss.DesigID = @DepID
    GROUP BY DocumentInfo.DesigID

END

JOIN 子句和 ON 子句中有不同的表名。假设您的 DocumentInfo 表中有 DesigID 列,我已尝试修复它。

【讨论】:

  • 我只有在 users 和 designation table 中才有设计库
  • 你和我的回答都行不通,因为他已经说过他在 documentInfo 表中没有 DesigId
  • @user3134694 DocumentInfo 中是否有任何列引用了Designation 中的任何列???
  • @user3134694 您能否更新您的问题并提供有关所有三个表和它们表中的列以及它们表中的任何外键的信息。
【解决方案2】:

查看您的评论尝试关注

ALTER procedure [dbo].[countdocuments]
@DepID int
as
BEGIN
SET NOCOUNT ON;
SELECT COUNT(*) AS Cnt,Designation.DesigID
FROM Designation left join dbo.Userss 
on dbo.Userss.DesigID = dbo.Designation.DesigID
left Join DocumentInfo on Userss.UserId= DocumentInfo.UserId and Designation.DepId = DocumentInfo.DepId
WHERE Userss.DesigID = @DepID
GROUP BY Designation.DesigID

END

或者试试下面

Looking at your comment try following

ALTER procedure [dbo].[countdocuments]
@DepID int
as
BEGIN
SET NOCOUNT ON;
SELECT COUNT(*) AS Cnt,Designation.DesigID
FROM DocumentInfo  left Join Userss on DocumentInfo.UserId = Userss.UserId
left Join Designation on DocumentInfo.DepId = Designation.DeptId
and Designation.DesigID = Userss.DesigId
WHERE Userss.DesigID = @DepID
GROUP BY Designation.DesigID

END

【讨论】:

  • 在documentinfo表中没有一列DesigID
  • 那你为什么要添加 DocumentInfo 表。在哪里加入设计表?
  • @user3134694 用户和设计表有什么关系?
  • 当没有用户注册时,他/她的设计保存在表中..并确定哪个用户属于哪个名称
  • @user3134694 我在问您可以在用户和指定表之间链接哪一列?
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多