0

说明如下:

生成客户购买的所有产品的报告:客户的 id、客户的全名、城市、州、身份证号、销售日期、产品代码、产品名称、售出的数量,最后是一条消息,显示“您已付款”或“付款待处理”状态,具体取决于付款状态,其中 0 = 已付款,1 = 待处理。此报告应首先按州的字母顺序排列,然后按客户名称排列。

我尝试的是这样的:

    select cli_nom, cli_city, cli_state, fac_num, fac_saledate, prod_cod, fac_total, fac_status 
where fac_status = 0 as paid and fac_status = 1 as pending 
from factures, products, clients order by cli_state, cli_nom, asc;

Wich absolutley 没有工作,我不确定重命名或屏蔽列的 sintax。

表结构如下:

table clientes:

 1. cli_nom  varchar(100)
 2. cli_state varchar(100)
 3. cli_city varchar(100)
 4. cli_id int(11)
 5. cli_status int(11)
 6. cli_dateofsale date

table products:

 1. prod_cod int(11)
 2. prod_categ char(1)
 3. prod_nom varchar(100)
 4. prod_price double
 5. prod_descrip varchar(100)
 6. prod_discount float

table facturas:

 1. fac_num int(11)
 2. fac_datesold date
 3. fac_cli_id int(11)
 4. fac_status int
 5. fac_total float
4

1 回答 1

1

您在查询时遇到问题。当您要查询某些内容时,完整语句的形式是这样的

Select [fields]
from [table(s)] --which means there includes inner joins
where [filter rows]
group by [fields to group]
having [filtering groups]
order by [fields]

当然,是比这更复杂和更大的东西,但它会给你一些初步的概念。

您将始终必须尊重此顺序,因此在您的查询中将 where 放入选择中。

如果您想根据某些评估更改要显示的内容,但您总是会显示某些内容(您不是在过滤,而是根据值选择要显示的内容),您可以使用CASE子句。

在这个例子中,你可以做这样的事情

select cli_nom, cli_city, cli_state, fac_num, fac_saledate, 
prod_cod, fac_total, fac_status 
CASE when fac_status = 0  then 'You Paid'
     when fac_status = 1 then 'payment Pending'
     else 'Not sure about state' END
from factures
inner join products on --put here how do you relate products with factures
inner join clients on -- put here how do you relate clients with products/factures
order by cli_state, cli_nom, asc;

如果你不知道如何使用 INNER JOIN,这里有一些信息。

基本上,是用于关联两个表的子句。

就像是

(..)
from Table1 A
INNER JOIN Table2 B on A.id = B.id

(A 和 B 是别名,代表已设置的表)。

这意味着它将比较 Table1 中的每一行与 Table2 中的每一行,并且当条件匹配时(在这种情况下,table1 [ A.id] 中的 id 等于 Table2 [中的 id = B.id]),然后显示关系行(意味着它将显示您从 table1 中的所有行 + 从 table2 中的所有行)

于 2013-05-07T16:25:50.063 回答