带有变量“Where”的 SQL 查询
Posted
技术标签:
【中文标题】带有变量“Where”的 SQL 查询【英文标题】:SQL query with variable "Where" 【发布时间】:2014-08-15 17:59:51 【问题描述】:我是 SQL 新手。
如何编写查询,其中 Where 条件取决于用户给出的语句?
我有这个:
SELECT TablePersdaten.Vorname, TablePersdaten.Nachname, TableBezahlung.Datum, TableBezahlung.BelegNr, TableBezahlung.Betrag, Sum(TableBezahlung.Betrag) AS SummevonBetrag
FROM ((TableTeilnehmer INNER JOIN TablePersdaten ON TableTeilnehmer.IDPersdaten = TablePersdaten.IDPersdaten) INNER JOIN TableKurse ON TableTeilnehmer.IDKurs = TableKurse.IDKurs) INNER JOIN TableBezahlung ON TableTeilnehmer.IDTeilnehmer = TableBezahlung.IDStudent
WHERE TableBezahlung.Datum = "VALUE GIVEN FROM USER"
GROUP BY TablePersdaten.Vorname, TablePersdaten.Nachname, TableBezahlung.Datum, TableBezahlung.BelegNr, TableBezahlung.Betrag
ORDER BY TableBezahlung.Datum;
编辑:我使用的是 Access 2013,但我自己使用 SQL 代码编写所有内容。值应通过表格给出。
【问题讨论】:
你在使用什么 rdbms?以及使用什么工具来接收用户的输入? 这个好像应该设置成存储过程,传入的值作为参数...... 您需要使用由用户分配值的变量。正如@Mureinik 提到的,您需要弄清楚如何获取用户输入。 我使用的是 Access 2013,应该通过表单给出值。 【参考方案1】:研究存储过程。您可以将用户输入作为参数包含在内,然后通过声明的参数将其传递给WHERE
子句。
所以理想情况下它会像这样(并注意INT
部分,它可能必须具有与table.datum
对应的不同值:
CREATE PROCEDURE dbo.Proc1
@parameter1 INT
AS
BEGIN
SELECT TablePersdaten.Vorname, TablePersdaten.Nachname, TableBezahlung.Datum, TableBezahlung.BelegNr, TableBezahlung.Betrag, Sum(TableBezahlung.Betrag) AS SummevonBetrag
FROM ((TableTeilnehmer INNER JOIN TablePersdaten ON TableTeilnehmer.IDPersdaten = TablePersdaten.IDPersdaten) INNER JOIN TableKurse ON TableTeilnehmer.IDKurs = TableKurse.IDKurs) INNER JOIN TableBezahlung ON TableTeilnehmer.IDTeilnehmer = TableBezahlung.IDStudent
WHERE TableBezahlung.Datum = @parameter1
GROUP BY TablePersdaten.Vorname, TablePersdaten.Nachname, TableBezahlung.Datum, TableBezahlung.BelegNr, TableBezahlung.Betrag
ORDER BY TableBezahlung.Datum;
END
当然还要在创建后执行该过程:
EXEC dbo.Proc1 '@parameter1value'
【讨论】:
【参考方案2】:如果您将输入“VALUE GIVEN FROM USER”参数化,这可能就是您所追求的。
...
WHERE TableBezahlung.Datum = &UserValue
...
单个 '&' 将替换该值一次。如果您使用“&&”,它将在会话结束时替换该值。
【讨论】:
以上是关于带有变量“Where”的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有内连接语句的 Sql 查询转换为带有 Where 语句的 sql 查询(语句中没有内连接)