【问题标题】:How do I display the leader's name from a queried value如何从查询值中显示领导者的姓名
【发布时间】:2012-10-15 03:56:14
【问题描述】:

我正在使用 WebMatrix 构建一个网页,用于查询我们的会计软件并显示当天的顶级推销员。

我有 4 个推销员:sam(推销员 7)Jared(推销员 8)Cha​​rlie(推销员 12)Mitchell(推销员 17)

查询代码:

var ssjb = db.QueryValue("SELECT SUM(SUBTOTAL) FROM dbo.DR_TRANS where Transdate = 41195 and SALESNO = 7 and subtotal >0");  
var sjdp = db.QueryValue("SELECT SUM(SUBTOTAL) FROM dbo.DR_TRANS where Transdate = 41195 and SALESNO = 8 and subtotal >0");  
var scjb = db.QueryValue("SELECT SUM(SUBTOTAL) FROM dbo.DR_TRANS where Transdate = 41195 and SALESNO = 12 and subtotal >0");    
var smms = db.QueryValue("SELECT SUM(SUBTOTAL) FROM dbo.DR_TRANS where Transdate = 41195 and SALESNO = 17 and subtotal >0"); 

现在,我想评估四个查询的结果,并显示“Top Salesman: name

我不知道如何评估查询然后将推销员编号转换为相应的名称。

编辑:数据库结构:

  • dbo.staff 有很多列,但前两个是staffno(主键)和Name
  • dbo.DR_TRANS 再次包含许多列,但我们正在使用的两个列是 subtotalsalesno - 它们都不是键。此表有一个滚动键,即发票编号。
  • Salesno 派生自 staffno(由应用程序从登录详细信息传递。)

【问题讨论】:

  • 另外,有人能告诉我一个让日期代码自我更新的技巧吗?我的数据库将其存储为 5 位代码,例如“41195”。如何将所有查询中的 41195 替换为会自动更新的“今天的日期”值?
  • 如果你能发布你的表格结构会更好。我猜你至少有两个表,DR_TRANS 和包含推销员姓名的表
  • @JohnWoo 我可以在员工表中查询名称,我没有尝试过。主要是因为我没有足够的信心尝试链接表查询。 DR_TRANS 只有一个业务员号,叫salesno
  • 你需要把两张表链接起来,这样才能得到推销员的名字
  • 发布结构,我会帮助构建查询

标签: sql razor webmatrix


【解决方案1】:

下面,(我认为)我们是您要查找的查询。两个表使用INNER JOIN 通过它们的LinkingDR_TRANS.Salesno = Staff.StaffNo 连接。它将列出所有有记录的Staff,以及哪些subtotal > 0。无需为 staffNo 添加条件,因为它们根据其总交易按降序排列。

SELECT  b.Name, SUM(subtotal) totalSUM
FROM    DR_TRANS a
        INNER JOIN Staff b
            ON a.Salesno = b.Staffno
WHERE   a.TransDATe = 41195 AND
        a.subtotal > 0
GROUP BY b.Name
ORDER BY totalSUM DESC

【讨论】:

  • 感谢约翰,但无论我尝试什么,它都会引发编译错误并抱怨“)预期”。是否必须全部在一条线上才能工作? razor 似乎与您的帖子不同。
  • @Bevan 如果你希望一个字符串在 Razor 语法中跨越多行,你必须以 @ 开头。试试var tsm = db.Query(@"SELECT b.Name, SUM(subtotal) totalSUM FROM DR_TRANS a INNER JOIN Staff b ON a.Salesno = b.Staffno WHERE a.TransDate = 41195 AND a.subtotal > 0 GROUP BY b.Name ORDER BY totalSUM DESC");
【解决方案2】:

这是你需要的吗?

SELECT TOP 1 staff.Name, SUM(SubTotal)
FROM Staff
INNER JOIN DR_TRANS on Staff.StaffNO = DR_TRANS.SalesNO
WHERE DR_TRANS.Transdate = 41195 and DR_TRANS.SALESNO IN (7,8,12,17) and DR_TRANS.subtotal > 0
GROUP BY staff.Name
ORDER BY SUM(SubTotal) DESC

结果将是具有最大 subTotal 的推销员的姓名。 Top 1 将强制它只返回第一行。

【讨论】:

  • var tsm = db.Query(SELECT TOP 1 staff.Name, SUM(SubTotal) FROM Staff INNER JOIN DR_TRANS on Staff.StaffNO = DR_TRANS.SalesNO WHERE DR_TRANS.Transdate = 41195 and DR_TRANS.SALESNO IN (7,8,12,17) and DR_TRANS.subtotal > 0 GROUP BY staff.Name ORDER BY SUM(SubTotal) DESC);
  • 尝试在开头和结尾加上“@”和引号:db.Query(@"SELECT .... DESC ");
  • 好的,是的,我错过了查询周围的“”。现在它确实运行了,并显示了一个名称——错误的名称!显示的名称不是得分最高的推销员,而是显示排在第三位的推销员。奇数。
  • 您可以删除TOP 1部分并查看整个结果集。再看看结果,确保问题不在于数据本身 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多