另一个参数中的列作为SQL SERVER

另一个参数中的列作为SQL SERVER,sql,sql-server,multiple-tables,Sql,Sql Server,Multiple Tables,我有两张这样的桌子: Name Salary_Got =================== Andy 300 Ana 360 表2.工作 Name Date =============== Andy 1 Jan Andy 2 Jan Andy 3 Jan Ana 1 Jan Ana 2 Jan Ana 3 Jan Ana 4 Jan 和表U工资 Name

我有两张这样的桌子:

Name     Salary_Got
===================
Andy        300
Ana         360
表2.工作

Name      Date
===============
Andy      1 Jan
Andy      2 Jan
Andy      3 Jan
Ana       1 Jan
Ana       2 Jan
Ana       3 Jan
Ana       4 Jan
和表U工资

Name      Salary
=================
Andy       150
Ana        120
我想使用表_Salary中的列名和Salary作为参数。因此,我可以显示如下数据:

Name     Salary_Got
===================
Andy        300
Ana         360
上表显示了通过工资x工作数量计算得出的工资。但我只展示了1月2日开始工作的地方。所以,安迪只工作2天,安娜只工作3天

注: 这只是一个说明问题的例子。我的问题比这更复杂。关键是我不能使用JOIN,因为我需要计算其他行


我希望任何人都能帮助我解决这个问题。提前谢谢。

试试这样的东西

select ts.Name, (ts.Salary * ISNULL(tw.workcound,0)) from Table_Salary ts left join
(select Name, count(*) workcount from Table_Work where Date != '2017-01-02' group by Name) 
tw ON ts.Name = tw.Name
试试这个:

select TW.Name, TW.DaysWorked * TS.Salary from (
    select [Name], count(*) [DaysWorked] from Table_Work TW
    where [Date] <> '1 Jan' --if you store date as text...
    -- where [Date] > '2018-01-01' --if you store Date as date
    group by [Name]
) TW join Table_Salary TS on TW.Name = TS.Name
试试这个:你可以使用outerapply来计算每个员工的天数,然后乘以它将得到受尊敬员工的工资

SELECT ts.Name, (ts.Salary*ISNULL(t.tot, 1)) Salary_Got 
FROM Table_Salary ts
OUTER APPLY(SELECT COUNT(*) tot 
            FROM Table_Work tw 
            WHERE tw.name = ts.name AND [Date] >= '2018-01-02') t

这看起来是一种糟糕的存储日期信息的方式。日期列实际上是文本吗?考虑存储完整日期类型,而不只是文本。如果日期真的是文本,您需要一些奥林匹克运动会来选择日期范围。不,这是唯一的说明阅读以下内容可能会有所帮助: