0

オラクルを使用してSQLステートメントをコーディングしますが、完全に理解していない/把握するのに苦労しているいくつかの宿題が与えられました(したがって、基本的なSQL手順/関数の優れたチュートリアル/リンクがあれば、それを歓迎します.

ここに質問があります

La Trobe e-Auction データベース システム内のアイテムのすべての名前、説明、および値を、オークションが既に終了している場合は「販売済み」、オークションが終了している場合は「入札なし」と表示する列とともにリストするストアド プロシージャオークションはすでに終了しているが、最低価格に達していない場合、「販売なし」の商品はすでに終了しており、入札は行われていません。

アイテムのオークションがまだ開かれている場合は「オークション中」

Item (itemNumber, itemName, itemDescription, itemValue, itemLocation, 
categoryID, sellerUsername)   

Auction (auctionNumber, currency, startDateTime, endDateTime, shippingTerms, 
startBidAmount, reserveAmount, bidIncrementAmount, noOfItems, itemSold, 
itemNumber feedbackDateAndTime, rating, comments, paymentDate, paymentid)

Bid (bidderUsername, auctionNumber, bidDateTime,bidAmount)

ここに私が考え出した理論がありますが、それをコーディングする方法に途方に暮れています。

status column -  a)sold, closed and item is sold
                 b)no bid, auction is close and no bids
                 c)no sale, the auction is closed but reserve wasnt met
                 d)on auction, auction for the item is still open

                 a) if i.itemnumber=a.itemnumber and itemSold='y'
                 b) if a.auctionnumber != b.auctionnumber and systemdate>endDateTime
                 c) if sysdate>endDatetime and a.auctionnumber=b.auctionnumber 
                 and reserveamount>select b.bidAmount 
                 from bid where a.auctionnumber=b.auctionnumber 
                 and b.bidAmount.max;
                 d) if itemSold ='n' and sysdate<endDateTime;




CREATE OR REPLACE PROCEDURE allItemStatus
AS 
    p_itemName Item.itemName%TYPE;
    p_itemDescription Item.itemDescription%TYPE;
    p_itemValue Item.itemValue%TYPE;
    P_itemSold Auction.itemSold%TYPE;
    BEGIN
SELECT i.itemName, i.itemDescription, i.itemValue, a.itemSold
INTO p_itemName, p_itemDescription, p_itemValue , p_itemSold
FROM dbf12.Item i, dbf12.Auction a
WHERE i.itemNumber=a.itemNumber 
AND a.itemSold='Y';
DBMS_OUTPUT.PUT_LINE('Item Name: '||p_itemName);
DBMS_OUTPUT.PUT_LINE('Item Description: '||p_itemDescription);
DBMS_OUTPUT.PUT_LINE('Item Value: '||p_itemValue);
        DBMS_OUTPUT.PUT_LINE('Item Sold: '||p_itemSold);
    END allItemStatus;

どんな助けでも大歓迎です。私はほとんどすべてを書き留めていないことを知っていますが、これをどこに行けばよいかわかりません。

ここに私の現在のコードがあります、それは私のsysdate> a.enddattimeが好きではありません

SELECT
   i.itemname,
   i.itemdescription,
   i.itemvalue,
   CASE
       WHEN i.itemnumber=a.itemnumber and a.itemSold='y' THEN 'Sold'
       WHEN a.auctionnumber != b.auctionnumber and systemdate>endDateTime THEN 'No Bids on that closed auction'
       WHEN TO_CHAR(sysdate,'DD-MON-YY')<a.endDatetime and a.auctionnumber=b.auctionnumber 
                 and reserveamount>(
                 SELECT b.bidAmount 
                 WHERE a.auctionnumber=b.auctionnumber 
                 AND b.bidAmount.max) THEN 'No Bids that meets the reserve'
        ELSE 'Auction Still Open'
   END 
FROM 
   dbf12.item i, dbf12.auction a, dbf12.bid b;
4

1 に答える 1

1

CASE ステートメントを使用する

SELECT
   itemname,
   itemdescription,
   itemvalue,
   CASE
       WHEN status=1 THEN 'Sold'
       WHEN status=2 THEN 'No Bid'
       WHEN status=3 AND (another condition here) THEN 'Closed'
       ELSE 'What Else'
   END display
FROM 
    eAuction

「display」は、「Sold」などを表示する列に付けられた名前です。

于 2012-05-31T04:14:23.323 に答える